我经常发现自己调试的代码看起来像这样:
def fn(a):
if a != 5:
raise ValueError('Error')
try:
fn(a=4)
except Exception as e:
raise RuntimeError('Caught it') from e
放入
pdb
会将我带到 RuntimeError
,但我想检查原始 ValueError
错误的堆栈跟踪。通常 fn
也运行在一个单独的线程中,使事情变得更加复杂。修改代码替换
raise RuntimeError('Caught it') from e
简单地
raise e
可以解决这个问题,但我想知道是否有一个更干净的解决方案,或者
pdb
中的命令允许“跨越from e
边界”?
是的,我浏览了你的代码 我更正了。
def fn(a):
if a != 5:
raise ValueError('Error')
try:
fn(a=4)
except Exception as e:
raise RuntimeError('Caught it') from e
import pdb
pdb.post_mortem(e)
希望这有帮助!