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
广告