2013-03-06 5 views
7

は私がキャッチし、のような何かをせずにプログラムをクラッシュさせるでしょう例外(および対応するスタックトレース)ダンプすることができます:Pythonでtry/exceptなしでプログラムの先頭に例外を返す方法に反応する方法はありますか?

try: 
    # whole program 
except Execption as e: 
    dump(e) 
    raise 

いつか外部ライブラリのクラッシュを、と私は死ぬのPythonに反応したいとその理由をログに記録します。例外をプログラムがクラッシュさせないようにしたいのではなく、単にデバッグ情報が必要です。以下のような

何か:

signals.register('dying', callback) 

def callback(context): 
    # dumping the exception and 
    # stack trace from here 

はあっても可能ですか?

import sys 

def myexcepthook(type, value, tb): 
    dump(type, value, tb) 

sys.excepthook = myexcepthook 

このstderrにトレースバックを出力しデフォルトのフックを、置き換え:sys.excepthook() functionを登録することにより、

答えて

12

はい、。キャッチされていない例外が発生し、インタープリタが終了しようとするたびに呼び出されます。

カスタムフックから元の例外フックを再利用したい場合は、sys.__excepthook__を呼び出す:

def myexcepthook(type, value, tb): 
    dump(type, value, tb) 
    sys.__excepthook__(type, value, tb) 
+0

私は今そんなにあなたを愛しています。 –

+0

ようこそ。 :-D –

+0

私はPyObject_CallObject()で関数を呼び出すことはできますが(C++から)、意図的に間違った数のパラメータを送ると、nullを返します。このフックを使用して値をスクリプトに戻すにはどうすればよいですか? – Qwerty

関連する問題