Mar*_*cin 18 python exception python-2.7 pdb
有没有办法在进入pdb之前检查pdb /中的最后一个异常?(使用python 2.7.5).
在我的代码中引发异常之后,立即(是的,我根本没有输入任何其他命令)sys.exc_info(); 这只是结果(None, None, None).此时,我可以这样做pdb.pm(),并且pdb从引发异常的那一刻开始.
我希望能够检查这个异常对象(它在被引发之前不存储在变量中).
在http://docs.python.org/2/library/pdb.html或http://docs.python.org/2/library/sys.html中没有任何明显的帮助.
编辑:我知道set_trace.我想在修改代码之前检查异常.
您可以通过以下方式检索pdb/ipdb中的最新异常:
__exception__
Run Code Online (Sandbox Code Playgroud)
以上实际上是(异常,消息)的元组.
这是你想要的?
import pdb
try:
1/0
except Exception as err:
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
% test.py
--Return--
> /home/unutbu/pybin/test.py(8)<module>()->None
-> pdb.set_trace()
(Pdb) err
ZeroDivisionError('integer division or modulo by zero',)
(Pdb) quit
Run Code Online (Sandbox Code Playgroud)
如果您不想修改发生异常的代码,则可以改为重新定义sys.excepthook:
import pdb
import sys
def excepthook(type, value, traceback):
pdb.set_trace()
sys.excepthook = excepthook
1/0
Run Code Online (Sandbox Code Playgroud)
% test.py
--Return--
> /home/unutbu/pybin/test.py(7)excepthook()->None
-> pdb.set_trace()
(Pdb) type
<type 'exceptions.ZeroDivisionError'>
(Pdb) value
ZeroDivisionError('integer division or modulo by zero',)
(Pdb) traceback
<traceback object at 0xb774f52c>
(Pdb)
Run Code Online (Sandbox Code Playgroud)
你可以使用sys.last_value:
>>> no_such_var
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'no_such_var' is not defined
>>> import sys
>>> sys.last_value
NameError("name 'no_such_var' is not defined",)
>>> sys.last_value.args
("name 'no_such_var' is not defined",)
Run Code Online (Sandbox Code Playgroud)
>>> no_such_var
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'no_such_var' is not defined
>>> import pdb, sys
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) sys.last_value
NameError("name 'no_such_var' is not defined",)
Run Code Online (Sandbox Code Playgroud)
注意:此解决方案并不完美.在未处理异常且解释器打印错误消息和堆栈回溯时设置该值.例如,如果使用了捕获异常try .. except ..,sys.last_value则不会设置.
| 归档时间: |
|
| 查看次数: |
9118 次 |
| 最近记录: |