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

2024-09-29 23:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有一个函数,解析文件中的前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异常处理程序来完成吗


Tags: 函数datadictionarylenreturnif错误line
2条回答

除非您想捕获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...

If any exception occurred, try clause will be skipped and except clause will run.

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

只需收集每个错误消息,然后返回

相关问题 更多 >

    热门问题