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