【python】詳解 try 處理異常機制

python的try語句有兩種風格:

  • 一:處理異常(try/except/else)
  • 二:無論是否發生異常都將執行最後的代碼(try/finally)

try 語句子句形式表

  • except: 捕獲所有異常
  • except name: 只捕獲特定的異常
  • except name as value: 捕獲異常和它的附加數據(將異常的信息保存到value,)
  • except (name1,name2): 捕獲任何列出的異常
  • else: 如果沒有異常
  • finally: 總是執行
try的工作原理是,當開始一個try語句後,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這裏,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
  • 1、如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
  • 2、如果在try後的語句裏發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並打印缺省的出錯信息)。
  • 3、如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。

一、try/except/else風格

#try/except/else風格
try:
    pass
except <異常名字>: 
    <語句> #如果在try部份引發了'name'異常
except <名字>,<數據>:
    <語句> #如果引發了'name'異常,獲得附加的數據
else:
    <語句> #如果沒有異常發生

#實例:
try:
    print('xxx')   #如果try的子語句能夠實現,則執行這個語句。整個流程走向else,然後控制流通過整個try語句。
except:
    print('error')
else:
    print(1)

輸出:

xxx
1

如果是 try 的子語句不能執行時,則會執行 except 語句,異常處理完畢,控制流就通過整個try語句;

try:
    print(xxx)
except:
    print('error')
else:
    print(1)

輸出:

#執行except就不會執行else
error

二、try/finally風格

try:
    <語句>
finally:
    <語句> #退出try時總會執行
try:
    print(kk)
except:
    print('error')
finally:
    print('ok')

輸出:

error
ok  #finally的內容是一定會執行的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章