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

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


米琪卡哇伊
浏览 42回答 2
2回答

慕田峪9158850

除非你想捕获除 的情况以外的异常,否则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...

慕妹3146593

如果发生任何异常,try 子句将被跳过,而 except 子句将运行。如果您在 Try 中的任何位置引发异常,则其他所有内容都将被跳过。因此,如果您希望循环继续,那么就不要使用 Try except。只需收集所有错误消息然后将其返回即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python