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

理解Python异常处理中的控制流,python,exception,control-flow,flowchart,Python,Exception,Control Flow,Flowchart,当我运行上面的代码时,我得到如下输出。我不了解这个脚本的流程 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 在Try块中

当我运行上面的代码时,我得到如下输出。我不了解这个脚本的流程

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
在Try块中!
回溯(最近一次呼叫最后一次):
在异常块中!
在最后一个街区!
0
文件“C:\Users\reccer\Documents\Practicals\test.py”,第7行,在
提高e
文件“C:\Users\reccer\Documents\Practicals\test.py”,第4行,在
a=10/0
ZeroDivision错误:被零除
[在0.3秒内完成,退出代码为1]
  • 进入try块
  • 发现错误
  • 除块外进入
  • 打印“在异常块中!”
  • 最后进入街区
  • 打印“最终块中!”&打印a
  • 然后执行从除块中升起e的手续

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

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

    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]
    

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

    一个数字不能被零除。您希望发生什么情况?这里有什么您不明白的地方?@mkrieger1我希望除块之外的
    会执行一次,然后它将进入
    最后
    块。但正如我们所看到的,它执行
    print
    语句,然后转到
    final
    块,然后返回
    except
    块,执行
    raisee
    。@jarmod执行上述脚本的流程。
    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