Python 获取对当前异常的引用
然后我可以使用Python 获取对当前异常的引用,python,debugging,exception,pdb,ipdb,Python,Debugging,Exception,Pdb,Ipdb,然后我可以使用exc来分析它 如何轻松地获得当前有效异常的引用?这也让我沮丧了一段时间。我最终找到了答案,并给出了详细的解释 简而言之,使用魔法前缀(!sys.exc_info()): [4]中的:1/0 --------------------------------------------------------------------------- ZeroDivisionError回溯(最近一次呼叫上次) ... ipdb>!系统执行信息() (,AttributeError(“'exc
exc
来分析它
如何轻松地获得当前有效异常的引用?这也让我沮丧了一段时间。我最终找到了答案,并给出了详细的解释 简而言之,使用
代码>魔法前缀(!sys.exc_info()
):
[4]中的:1/0
---------------------------------------------------------------------------
ZeroDivisionError回溯(最近一次呼叫上次)
...
ipdb>!系统执行信息()
(,AttributeError(“'exceptions.ZeroDivisionError'对象没有属性'\u render\u traceback'),)
这基本上告诉调试器:“猜测是不必要的。我正在键入的是python代码”,从而防止调试器试图猜测“sys”是什么意思,在这个过程中会引发一些内部异常,覆盖sys.exc_info()
,用于保存原始异常。看起来这里可能已经给出了答案:@AaronD,链接中的答案仅在pdb
中有效,而不是ipdb
…@AaronD,当试图检索sys时,我得到了AttributeError:“module”对象没有属性“last\u value”
。last\u value
在中,除了
:谢谢,这很有效。我希望有一个内置的ipdb
命令,否则我必须键入:!导入系统;sys.exc_info()
@warwaruk您可以在.pdbrc
中定义别名,谢谢!最后我放了别名exc_info!导入系统;sys.exc_info()。要分配给变量,可以使用!导入系统;exc=sys.exc_info()
然后您可以浏览它,导入回溯
并打印它,等等。非常有用!。仅供参考,你从何处获得想法的链接不再指向任何相关内容。
$ ./runtests.py -v tests/managers/test_customer.py:CustomerManagerTest.test_register_without_subscription --ipdb
...
test_register_without_subscription (tests.managers.test_customer.CustomerManagerTest) ...
- TRACEBACK --------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/unittest/case.py", line 331, in run
testMethod()
File "*****/tests/managers/test_customer.py", line 198, in test_register_without_subscription
1/0
ZeroDivisionError: integer division or modulo by zero
--------------------------------------------------------------------------------
> *****/tests/managers/test_customer.py(198)test_register_without_subscription()
197 def test_register_without_subscription(self):
--> 198 1/0
199 ...
ipdb> import sys
ipdb> sys.exc_info()
(<type 'exceptions.AttributeError'>, AttributeError("Pdb instance has no attribute 'do_sys'",), <traceback object at 0x47eb908>)
ipdb>
try:
do_something_that_raises_an_exception()
except Exception as exc:
import ipdb; ipdb.set_trace()
In [4]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
...
ipdb> !sys.exc_info()
(<type 'exceptions.AttributeError'>, AttributeError("'exceptions.ZeroDivisionError' object has no attribute '_render_traceback_'",), <traceback object at 0x101c55fc8>)