如何获取默认IPython异常处理程序捕获的异常对象?

17

假设我正在IPython中交互式地运行一些代码,并且产生了未捕获的异常,例如:

In [2]: os.waitpid(1, os.WNOHANG)
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-2-bacc7636b058> in <module>()
----> 1 os.waitpid(1, os.WNOHANG)

OSError: [Errno 10] No child processes

现在默认的IPython异常处理程序截取了此异常并生成了一个错误消息。有没有办法以某种方式提取被IPython捕获的异常对象呢?

我想要与以下代码产生相同的效果:

# Typing this into IPython prompt:
try:
    os.waitpid(1, os.WNOHANG)
except Exception, exc:
    pass
# (now I can interact with "exc" variable)

但是我希望它没有这个try/except样板代码。

1个回答

38

我认为sys.last_value应该能解决问题:

In [8]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)

/home/ubuntu/<ipython console> in <module>()

ZeroDivisionError: integer division or modulo by zero

In [11]: sys.last_value
Out[11]: ZeroDivisionError('integer division or modulo by zero',)

如果您想要更多的有趣体验,可以查看traceback模块,但在ipython中这可能没有太大用处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接