2012-07-17 14 views
7
のように、

私はIPythonで対話的にいくつかのコードを実行していると仮定し、それがキャッチされない例外を生成します。デフォルトの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決まり文句なしにそれをしたいです。

答えて

21

私はsys.last_valueはトリックを行うべきだと思う:あなたがさらに楽しくなものとしたい場合は、traceback moduleをチェックアウト

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',) 

が、それはおそらく、ipythonの中に多くの使用ではありません。

関連する問題