13

假设我在 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样板。

4

1 回答 1

34

我认为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 中可能没有多大用处。

于 2012-07-17T14:24:05.907 回答