まだそれをログに記録しながら、ユーザーにエラーを表示するには?
-
21-08-2019 - |
質問
私は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
...