Python - 巢狀 try 程式碼塊



Python 中的巢狀 try 程式碼塊

在 Python 程式中,如果在 try 程式碼塊或其 except 程式碼塊內還有另一個 try-except 結構,則稱為巢狀 try 程式碼塊。當外部和內部等不同的程式碼塊可能導致不同的錯誤時,需要這樣做。為了處理這些錯誤,我們需要巢狀 try 程式碼塊。

我們從一個只有一個“try-except-finally”結構的例子開始。如果 try 程式碼塊內的語句遇到異常,則由 except 程式碼塊處理。無論是否發生異常,finally 程式碼塊始終都會執行。

示例 1

這裡,try 程式碼塊存在“除以 0”的情況,因此 except 程式碼塊開始發揮作用。它配備了使用 Exception 類處理通用異常的功能。

a=10
b=0
try:
   print (a/b)
except Exception:
   print ("General Exception")
finally:
   print ("inside outer finally block")

它將產生以下輸出 -

General Exception
inside outer finally block

示例 2

現在讓我們看看如何巢狀try結構。我們在現有的 try 程式碼塊內放置另一個“try-except-finally”程式碼塊。內部 try 的 except 關鍵字現在處理通用異常,而我們要求外部 try 的 except 程式碼塊處理 ZeroDivisionError。

由於內部try程式碼塊中沒有發生異常,因此不會呼叫其對應的通用 Except。除以 0 的情況由外部 except 子句處理。

a=10
b=0
try:
   print (a/b)
   try:
      print ("This is inner try block")
   except Exception:
      print ("General exception")
   finally:
      print ("inside inner finally block")
      
except ZeroDivisionError:
   print ("Division by 0")
finally:
   print ("inside outer finally block")

它將產生以下輸出 -

Division by 0
inside outer finally block

示例 3

現在我們反轉情況。在巢狀的try程式碼塊中,外部程式碼塊沒有引發任何異常,但是導致除以 0 的語句在內部 try 中,因此由內部except程式碼塊處理異常。顯然,對應於外部try: 的except部分不會被呼叫。

a=10
b=0
try:
   print ("This is outer try block")
   try:
      print (a/b)
   except ZeroDivisionError:
      print ("Division by 0")
   finally:
      print ("inside inner finally block")
      
except Exception:
   print ("General Exception")
finally:
   print ("inside outer finally block")

它將產生以下輸出 -

This is outer try block
Division by 0
inside inner finally block
inside outer finally block

最後,讓我們討論一下巢狀程式碼塊中可能發生的另一種情況。雖然外部try: 中沒有任何異常,但沒有合適的 except 程式碼塊來處理內部try: 程式碼塊中的異常。

示例 4

在下面的示例中,內部try: 遇到“除以 0”,但其對應的 except: 正在尋找 KeyError 而不是 ZeroDivisionError。因此,異常物件傳遞到後續與外部 try: 語句匹配的 except 語句的 except: 程式碼塊。在那裡,捕獲並處理了 zeroDivisionError 異常。

a=10
b=0
try:
   print ("This is outer try block")
   try:
      print (a/b)
   except KeyError:
      print ("Key Error")
   finally:
      print ("inside inner finally block")
      
except ZeroDivisionError:
   print ("Division by 0")
finally:
   print ("inside outer finally block")

它將產生以下輸出 -

This is outer try block
inside inner finally block
Division by 0
inside outer finally block
廣告