[英]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.