我只是好奇是否存在 ipdb 调试器跳回到引发异常源的命令。
考虑以下小程序。
import sys
import random
def somefun():
someval = random.random()
raise Exception()
def run():
try:
somefun()
except Exception:
sys.exit(10)
当从命令行(使用 ipython-console (运行run
函数时,它会按预期以 10 退出。 有没有办法启动事后调试器(pdb.pm()
(并通过跳回来获取someval
的值?
except Exception: sys.exit(10)
有没有办法...通过跳回去获得 someval 的价值?
不。它消失了。您的错误处理程序吞下了异常 并做了一些 Python 认为"正常"的事情, 尽管父进程会将非零退出状态解释为错误。
在调试上下文中引发致命的 python 错误。 这是一种方法:
except Exception:
if debug:
raise
else:
sys.exit(10)
然后调用$ python -m pdb some_script.py
会让你 通过以下方式检查回溯和值:
(Pdb) bt
和
(Pdb) p someval