python - 引发异常后,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() 有什么区别?令我惊讶的是,一些函数显然可以在引发异常后运行,而其他函数则不能。
任何想法表示赞赏。
谢谢。
解决方案
当引发异常时,控制流会发生变化。除非您捕获异常,否则引发异常的行下方的所有语句都不会执行。
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
推荐阅读
- dart - 使用颤振的多用户应用程序
- python - 检查随机生成的数组中是否存在值
- php - PHP全局关键字如何在使用范围的函数内工作?
- python - 如何将 Pandas 系列转换为 Dataframe 以进行合并
- c - 在 68HC16 上使用 gcc 2.8.1;制作安装问题
- bokeh - 如何在 HoloViews 中设置散景刻度和字体选项?
- react-native - 如何在 react-native 中修复“CredentialsError:配置中缺少凭据”(aws-sdk)
- laravel - 运行迁移后填充表
- docker - init: true 不转发信号
- python-3.x - 如何有条件地从多个 Python 字典中删除键。条件是 (Value <= time.time()- 15)