簡體   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