質問

私はPyQt4のユーザーインターフェイスを使用しています。私は簡単にデバッグとトラブルシューティングのためのログファイルに標準エラー出力をリダイレクトしてきましたが、今私は、エラーが発生した場合、ユーザーにエラーメッセージを表示する必要があります。

私の問題は、私はそれが起こるときに例外をキャッチし、ユーザーはそれが起こったことを知らせるが、それでもトレースバックがstderrに(すなわち、ログファイル)を伝播させる必要があるということです。

私はこのような何かをしている場合:

def updateResults(self):
    try:
        #code that updates the results
    except:
        #display error message box

これは、例外をキャッチし、エラーログにpropogateません。

ユーザーにメッセージを表示し、エラーをpropogateを継続するためにいくつかの方法がありますか?

この作品は、でしょうか?

except, e:
    #display error message box
    raise e

私の目標を達成するためのより良い方法はありますか?

役に立ちましたか?

解決

私はあなたが間違った方法でこれを考えていると思います。あなたはラインの下、さらにそれをログに記録するだけで、エラーを再調達するべきではありません。 Pythonでこれを行うcannonical方法は、ロギングモジュールを使用することです。ドキュメントから適応ます:

import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)

...

try:
    # code
except:
    logging.debug('Something bad happened', exc_info=True)
    # display message box
    # raise (if necessary)

このはsys.stdoutの上に作らエラーに頼るよりもはるかに柔軟なロギングシステムを提供します。あなたは、いくつかの方法で、例外から回復できた場合に例外を再調達する必要はありません。

他のヒント

正確に、あなただけ

することができます
raise

現在処理の例外を再発生させますされます。

いくつかの追加情報:

(PyQt4で)あなたはまた、すべてののキャッチされていないの例外をキャッチするために、独自の機能にsys.excepthookを再バインドする必要があります。それ以外の場合はPyQtははちょうどあなたが必要なものではない可能性がある、コンソールに出力されます...

import sys

def excepthook(exc_type, exc_val, tracebackobj):
    # do something useful with the uncaught exception
    ...

def main():
    # rebind excepthook
    sys.excepthook = excepthook
    ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top