Python 在GUI事件发生异常时启动PDB外壳程序(wx按钮)

Python 在GUI事件发生异常时启动PDB外壳程序(wx按钮),python,wxpython,pdb,Python,Wxpython,Pdb,我看到了,但这对我在Python2.7.1和Ubuntu11.04上测试没有帮助。考虑下面的例子: 导入wx 类测试对象: 定义初始自我,innum: 普林蒂纳姆:+strinnum 对于xrangeinnum中的x,-1,-1: tval=浮点数/x 普林特瓦尔 类MyFramewx.Frame: 定义初始自我,父级: wx.Frame.\uuuuu init\uuuuu self,父级,-1,测试除外 self.btn=wx.Buttonself,-1,单击我 self.btn.setbac

我看到了,但这对我在Python2.7.1和Ubuntu11.04上测试没有帮助。考虑下面的例子:

导入wx 类测试对象: 定义初始自我,innum: 普林蒂纳姆:+strinnum 对于xrangeinnum中的x,-1,-1: tval=浮点数/x 普林特瓦尔 类MyFramewx.Frame: 定义初始自我,父级: wx.Frame.\uuuuu init\uuuuu self,父级,-1,测试除外 self.btn=wx.Buttonself,-1,单击我 self.btn.setbackgroundcolorwx.namedcoloorrange psizer=wx.boxsizerxx.HORIZONTAL psizer.Addself.btn,1,wx.EXPAND | wx.ALL,20 自动设定尺寸器 self.setSize200200 self.btn.Bindwx.EVT_按钮,self.runTest 自我布局 def runTestself,事件: t=测试仪3 普林特 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': runWx=True-False 如果未运行wx: t=测试仪3 普林特 其他: app=wx.App0 frame=MyFrameNone app.SetTopWindowframe 画框。展示 app.MainLoop 如果我将runWx设置为False,那么程序将严格从命令行运行,一切都如预期的那样:

$python-m pdb test.py >/tmp/test.py1 ->导入wx Pdb c 铟:3 1 1.5 3 回溯最近一次呼叫上次: main中的文件/usr/lib/python2.7/pdb.py,第1314行 pdb._runscriptmainpyfile 文件/usr/lib/python2.7/pdb.py,第1233行,在运行脚本中 self.runstatement 文件/usr/lib/python2.7/bdb.py,第387行,正在运行 全局、局部中的exec cmd 文件,第1行,在 文件test.py,第1行,在 导入wx 文件test.py,第7行,在_init中__ tval=浮点数/x ZeroDivisionError:浮点除以零 未捕获的异常。进入后期调试 运行“cont”或“step”将重新启动程序 >/tmp/test.py7\uu init__ ->tval=浮点数/x Pdb p x 0 Pdb q 验尸完毕。test.py将重新启动 >/tmp/test.py1 ->导入wx Pdb q 。。。也就是说,当引发异常时,pdb会引发一个事后shell,我可以检查值并退出程序

但是如果runWx是真的,就像在代码中一样,那么我必须单击GUI上的按钮来引发异常;在这种情况下,我得到:

$python-m pdb test.py >/tmp/test.py1 ->导入wx Pdb c 铟:3 1 1.5 3 回溯最近一次呼叫上次: 文件test.py,第22行,在runTest中 t=测试仪3 文件test.py,第7行,在_init中__ tval=浮点数/x ZeroDivisionError:浮点除以零 。。。也就是说,没有显示pdb外壳,相反,输出终端只是在打印回溯后阻塞,事实上,您可以重复单击按钮,并在终端中重复打印回溯,而不会掉落到pdb外壳


在wx或任何GUI事件引发未经处理的异常时,是否可以将其放入pdb外壳?如果可以,在上面的示例中如何操作?

我相信您所要做的就是导入pdb并在事件处理程序中设置跟踪:

def runTest(self, event):
    import pdb
    pdb.set_trace()
    t = Tester(3)
    print(t)
这在Xubuntu 14.04和wxPython 2.8.12以及Python 2.7上对我很有效。另见: