繁体   English   中英

捕获异常后如何继续循环

[英]How to continue loop after catching exception

下面的代码在处理非int值时会产生异常,但它不会继续循环,而是从循环引发错误中出来。 我的意图是为异常情况提供0值。

输入样例:

Common Ruby Errors 45min
Rails for Python Developers lightning

码:

class TimeNotProvidedError(Exception):
    pass

def extract_input():
    lines = []
    __tracks = {}

    try:
        lines = [line.strip() for line in open('test.txt')]
    except FileNotFoundError as e:
        print("File Not Found", e)

    for line in lines:
        title, minutes = line.rsplit(maxsplit=1)
        minutes = int(minutes[:-3])
        try:
            __tracks[title] = minutes
        except TimeNotProvidedError:
            __tracks[title] = 0
    return __tracks

print(extract_input())

追溯:

ValueError: invalid literal for int() with base 10: 'lightn'

使用此行转换为int时,您会得到错误: minutes = int(minutes[:-3]) 该行不在try块中,因此未捕获到异常。 try块内移动该行,您将获得想要的行为。

此外,您捕获的异常是TimeNotProvidedError ,它不是转换失败时int抛出的异常。 相反,它将引发ValueError ,因此这是您需要捕获的异常类型。


分配给的单纯行为__tracks[title]不太可能导致异常,如果确实如此 ,再试图用另一种分配可能无论如何都不会工作。 您可能想要的循环是这样的:

title, minutes = line.rsplit(maxsplit=1)
try:
    minutes = int(minutes[:-3])
except ValueError:
    minutes = 0
__tracks[title] = minutes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM