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 に答える