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中無錯誤地執行return
,break
或continue
後,finally塊中的語句無論try中的成功與否都會執行。而函數的返回值由最後執行的return語句決定。由於finally一定會執行,所以finally中的return會是最後執行的return語句,導致導致上述結果。try...finally
語句中謹慎對待含有return
,break
,continue
的情況。
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