Python - 嵌套 try 块



Python 中的嵌套 try 块

在 Python 程序中,如果 try 块或其 except 块内有另一个 try-except 构造,则称为嵌套 try 块。当不同的块(如 outer 和 inner)可能导致不同的错误时,这是必需的。为了处理它们,我们需要嵌套的 try 块。

我们从一个具有单个 “try − except − finally” 结构的示例开始。如果 try 中的语句遇到异常,则由 except block 处理。无论是否发生异常,始终执行 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 关键字现在处理泛型 Exception,而我们要求外部 try 的 except 块处理 ZeroDivisionError。

由于 exception 不会发生在内部 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: 面临 “division by 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