【发布时间】:2020-01-02 12:02:28
【问题描述】:
非常简单的小例子:
if __name__ == '__main__':
print("Still ok")
raise Exception("Dummy exception")
print("End of Program")
我在使用 Python 3.6 的 PyCharm 2019.2 调试器中运行它时得到这个输出:
/usr/bin/python3.6 /home/[...]/pycharm-community-2019.2/helpers/pydev/pydevd.py --multiproc --qt-support=auto --client 127.0.0.1 --port 46850 --file /home/[...]/test_traceback.py
pydev debugger: process 18394 is connecting
Connected to pydev debugger (build 192.5728.105)
Still ok
此时调试器会中断执行流程,但在调试器控制台中不会显示回溯和异常消息。如果我在 PyCharm 2018.1 中运行相同的,它确实会在断点被命中时显示这些。
当我点击 时,我得到了所需的输出,但是我无法再在调试上下文中运行代码,因为进程结束了:
Traceback (most recent call last):
File "/home/[...]/pycharm-community-2019.2/helpers/pydev/pydevd.py", line 2060, in <module>
main()
File "/home/[...]/pycharm-community-2019.2/helpers/pydev/pydevd.py", line 2054, in main
globals = debugger.run(setup['file'], None, None, is_module)
File "/home/[...]/pycharm-community-2019.2/helpers/pydev/pydevd.py", line 1405, in run
return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)
File "/home/[...]/pycharm-community-2019.2/helpers/pydev/pydevd.py", line 1412, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/[...]/pycharm-community-2019.2/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/home/[...]/test_traceback.py", line 4, in <module>
raise Exception("Dummy exception")
Exception: Dummy exception
Process finished with exit code 1
我的断点配置:
【问题讨论】:
-
但是……这就是它的工作原理?它抛出一个错误,你暂停。控制台中的 Traceback 实际上是 handler 所做的最后一件事。但是您在处理程序启动之前暂停它。您的断点是针对异常的,而不是针对处理程序内部(打印回溯的地方)或“在退出前停止”之类的东西。
-
这篇文章可能有用:intellij-support.jetbrains.com/hc/en-us/community/posts/… 简写形式:检查
__exception__变量以查看引发了哪个异常及其字段。 -
@h4z3 我期望的行为是我从旧 PyCharm 版本中习惯的行为。为了确认,我刚刚下载了一个新的 PyCharm 2018.1 执行程序,它确实在异常处停止,打印了异常消息和回溯,仍然让我在原地调试它。