以下代码在处理非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'
答案 0 :(得分:3)
使用此行转换为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