在wxPython下,当主循环中出现未处理的异常时,将打印回溯并忽略该异常。在PyCharm下进行调试时并非如此。然后,未处理的异常导致流程终止。另外,这是新行为,因为以前版本的PyCharm并非如此。
采用以下测试代码:
import wx
import wx.lib.sized_controls as sc
def Raise(evt=None):
raise Exception('error')
app = wx.App()
frame = sc.SizedFrame(None,-1,'hello')
p = frame.GetContentsPane()
b = wx.Button(p,-1,'press')
frame.Bind(wx.EVT_BUTTON,Raise,b)
frame.Show()
app.MainLoop()
运行此按钮时通常会导致打印并忽略异常。在PyCharm调试模式下运行时,过程终止。有没有办法改变这种行为?
Windows10,Python3.6,wxPython 4.0.4,PyCharm 2019.3
[与大多数Python调试器一样,PyCharm将其自己的异常处理程序安装为sys.excepthook
,因此,只要正常运行与调试器运行之间有不同的行为,就可以开始查找。例如,如果您查看项目的断点列表,还将看到用于打破异常的选项。这些东西在新的excepthoot
函数中实现。如果所有其他方法均失败,则可以查看PyCharm用于启动调试对象并与被调试对象通信的pydev代码,并查看它在与异常挂钩相关的代码中的工作情况,这可能会提供一些有关如何解决此问题的线索。
我不再使用它了,所以我可能会记错了,但是我似乎想起来,PyCharm中有一个选项可以停止或忽略未处理的异常,或者忽略从特定位置引发的异常,但是我'现在都没有看到它们。
OTOH,在事件处理程序或其他回调函数结束之前捕获异常总是一个好主意。