7

次のようなことをせずにプログラムをクラッシュさせる例外 (および対応するスタックトレース) をキャッチしてダンプできますか?

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

それは可能ですか?

4

1 に答える 1

12

はい、sys.excepthook()関数を登録することにより:

import sys

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

sys.excepthook = myexcepthook

これは、トレースバックを に出力するデフォルトのフックを置き換えstderrます。キャッチされない例外が発生し、インタープリターが終了しようとするたびに呼び出されます。

カスタム フックから元の例外フックを再利用する場合は、次のように呼び出しますsys.__excepthook__

def myexcepthook(type, value, tb):
    dump(type, value, tb)
    sys.__excepthook__(type, value, tb)
于 2013-03-06T11:57:14.033 に答える