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块中,外部 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