为了账号安全,请及时绑定邮箱和手机立即绑定

如何在for循环中捕获异常并仅在循环完成后返回异常?

如何在for循环中捕获异常并仅在循环完成后返回异常?

米琪卡哇伊 2024-01-15 21:11:02
您好,我有一个函数可以解析文件中的前 60 行,并且应该在存在完全空白的行时提醒用户。然而,这些可能发生在这 60 行中的任何位置,因此我希望脚本解析整个 60 行,主要是因为我需要其中几行的数据来进行错误报告。我们可能想知道这些错误将来会发生在哪里。我写了这个:def header_data(data):    dictionary = {}    datalen = len(data)    itrcntr = 0    try:        for line in data:            itrcntr += 1            if line.isspace():                raise Exception('File has badly formatted header data line(s)')            else:                linesplit = line.rstrip().split(":")                if len(linesplit) > 1:                    dictionary[linesplit[0]] = linesplit[1].strip()        return dictionary     except Exception as e:        errmsg = str(e)        if itrcntr == datalen:            return (dictionary, errmsg)        else:            pass  有了这个函数,我希望如果它发现 itrcntr 不等于 datalen,它会通过并返回到 try 块并继续到下一行。但这并没有发生。相反,它会跳出函数并在函数调用者的下一行中继续。如何让它继续循环,直到到达循环末尾,然后返回字典以及错误消息?或者这不能通过 try catch 异常处理程序来完成吗?
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

除非你想捕获除 的情况以外的异常,否则line.isspace我根本不会使用块。try只需将您的错误收集在列表中,例如:


errors = []

for line in data:

    itrcntr += 1

    if line.isspace():

        errors.append('File has badly formatted header data at line %d.' % itrcntr)


# then at the end:

if errors:

    # do something about it...


查看完整回答
反对 回复 2024-01-15
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果发生任何异常,try 子句将被跳过,而 except 子句将运行。

如果您在 Try 中的任何位置引发异常,则其他所有内容都将被跳过。因此,如果您希望循环继续,那么就不要使用 Try except。

只需收集所有错误消息然后将其返回即可。


查看完整回答
反对 回复 2024-01-15
  • 2 回答
  • 0 关注
  • 38 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信