2016-05-25 15 views
2

例外オブジェクトであるerrの詳細情報をエラーメッセージを超えて取得しようとしています。私のコードでは、いくつかのサブ関数の深い例外を捕捉することがあります。戻る私はなどsys.exc_infoを除いた例外から情報を取得する

例外が発生した場所についての情報を印刷するトップレベルに私は答えがsys.exc_infoを使用することを含む同様の質問を見てきましたが、ドキュメントによると、これはあまりにも限られている:

現在のスタックフレームまたは古いスタックフレーム内の 節以外で検出された最新の例外に関する情報を返します。

Iは、おそらく複数の例外は、後の点で上昇された状態で、プログラムの実行中にいくつかの不可知の時点でキャプチャされ、記憶された任意の例外オブジェクトからこの情報を取得したい一方。

情報がそこにあるようです。私がraise errを発行すれば、それはすべて出てくる。しかし、例外オブジェクトからそれを取り除く方法を理解することはできませんraisそれを送信する。どういうわけかraiseの出力を文字列に取り込んで印刷することはできますか?

+0

それが発生するまで、例外は普通のオブジェクトです。 –

+0

はい、それが私が求めている理由です。このオブジェクトを調べて行番号などを見つけるにはどうすればよいですか? – DNF

+0

何の行番号ですか?例外が発生した行にすることはできません –

答えて

1

tracebackモジュールを使用する:

>>> import traceback 
>>> try: 
... raise Exception() 
... except Exception as e: 
... print(traceback.extract_tb(e.__traceback__)) 
... 
[('<stdin>', 2, '<module>', None)] 

(2行番号)

+0

まさに私が探していたもの! – DNF

関連する問題