python異常捕獲兩處坑

finally

通常運行函數的時候,遇到return就會返回。

def a():
    return '123'
    return '456'

結果:

>>> a()
'123'

不過在函數運行時,引入異常處理,並且在處理的時候使用finally關鍵字,就會有一些不同。

def some_func():
    try:
        return 'from_try'
    finally:
        return 'from_finally'

結果:

>>> some_func()
'from_finally'

當在try...finally語句的try中無錯誤地執行returnbreakcontinue後,finally塊中的語句無論try中的成功與否都會執行。而函數的返回值由最後執行的return語句決定。由於finally一定會執行,所以finally中的return會是最後執行的return語句,導致導致上述結果。try...finally語句中謹慎對待含有returnbreakcontinue的情況。

except

python3中不支持except後使用,並排放置多個異常,或者最後一個放置一個異常變量的寫法。如果需要捕獲多個異常,可以將異常類型傳入一個元組中,然後捕捉。指定捕獲變量的別名,可以用as

some_list = [1, 2, 3]
try:
    print(some_list[4])
except IndexError, ValueError:
    print("Caught!")

結果出錯:

File "<input>", line 3
except IndexError, ValueError:
                 ^
SyntaxError: invalid syntax

正確的寫法(不支持英文逗號並列)

some_list = [1, 2, 3]
try:
    some_list.remove(4)
except (IndexError, ValueError) as e:
    print("Caught!")
    print(e)

結果

Caught!
list.remove(x): x not in list
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章