了解Python异常处理中的控制流

问题描述

a=0
try:
    print("In Try Block !")
    a = 10/0
except Exception as e:
    print("In Exception Block !")
    raise e
finally:
    print("In Finally Block !")
    print(a)
    pass

运行上面的代码时,我得到的输出如下。我没有这个脚本的流程。

In Try Block !
Traceback (most recent call last):
In Exception Block !
In Finally Block !
0
  File "C:\Users\reccer\Documents\Practicals\test.py",line 7,in <module>
    raise e
  File "C:\Users\reccer\Documents\Practicals\test.py",line 4,in <module>
    a = 10/0
ZeroDivisionError: division by zero
[Finished in 0.3s with exit code 1]
  1. 输入尝试块。
  2. 发现错误
  3. 输入除块。
  4. 打印“在异常块中!”
  5. 进入finally块。
  6. 打印“最后一块!” 并打印 a
  7. 然后从区块中执行 raise e 的手续。

我无法获得控制流程的任何具体参考。

解决方法

流程正确。在离开try \ except \ finally结构之前,将执行finally块。由于您重新引发了异常,因此该异常将从结构中传递出去,因此最终必须首先运行。

a=0
try:
    print("In Try Block !")
    a = 10/0
except Exception as e:
    print("In Exception Block !")
    raise e   # send exception up the call stack,but must run finally first 
finally:
    print("In Finally Block !")
    print(a)
    pass   # not needed

您看到的错误跟踪是由调用您的代码的代码生成的-可能是核心python引擎。