首页 > 解决方案 > 引发异常后,python 回溯如何运行?

问题描述

我对以下行为感到惊讶:

import traceback

raise Exception('dogs')
traceback.print_exc()
print('cat')

#=> 成功打印回溯,不打印 cat。

import traceback

raise Exception('dogs')
# traceback.print_exc()

print('cat')

#=> 也不打印 cat。

那么这里到底发生了什么?traceback.print_exc() 模块和 print() 有什么区别?令我惊讶的是,一些函数显然可以在引发异常后运行,而其他函数则不能。

任何想法表示赞赏。

谢谢。

标签: python

解决方案


当引发异常时,控制流会发生变化。除非您捕获异常,否则引发异常的行下方的所有语句都不会执行。

Traceback 用于打印堆栈跟踪 - https://docs.python.org/3/library/traceback.html

import traceback

try:
    raise Exception('dogs')
except:
    traceback.print_exc()
    print('cat')

输出:

In [5]: import traceback
   ...:
   ...: try:
   ...:     raise Exception('dogs')
   ...: except:
   ...:     traceback.print_exc()
   ...:     print('cat')
   ...:
Traceback (most recent call last):
  File "<ipython-input-5-3599c128a12e>", line 4, in <module>
    raise Exception('dogs')
Exception: dogs
cat

推荐阅读