在回溯中不使用“raise”引发异常?

8

可能重复的问题:
如何在Python异常堆栈中不显示raise行

内置异常例如NameError等会给出一个回溯,指向代码中发生异常的位置。我正在编写一个实用模块时,如果使用我的模块的代码引发了异常,最后出现在异常前面的是我的raise WhateverError

有没有办法在Python中引发异常,并使回溯停留在一帧之上,就像内置异常一样(而不编写C代码)?

1个回答

3

纯Python无法提供一种方式来改变现有的traceback对象或创建任意的traceback对象。

>>> exc_info[2].tb_next = None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: readonly attribute

>>> types.TracebackType()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot create 'traceback' instances

请注意,如果可能的话,您不仅会影响回溯的默认格式,还会干扰人们使用pdb对您的实用程序模块进行事后错误分析的能力。
如果您的实用程序模块正在记录或以其他方式格式化回溯,则可以在输出中不包括您认为无趣的帧。例如,标准库的unittest模块在报告运行测试时发生的错误时就会这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接