6

純粋な Python Tkinter アプリケーションに使用できるクラッシュ レポートフレームワークはありますか? 理想的には、クロスプラットフォームで動作する必要があります。

実際には、Python インタープリター自体はほとんどクラッシュしないため、これは「例外報告」に近いものです。

クラッシュ レポーターの例を次に示します。

代替テキスト

4

2 に答える 2

7

try..exceptどこでもコードを汚染するのではなく、独自の except フックを設定して実装する必要がありますsys.excepthook。次に例を示します。

import sys
import traceback

def install_excepthook():
    def my_excepthook(exctype, value, tb):
        s = ''.join(traceback.format_exception(exctype, value, tb))
        dialog = ErrorReportDialog(None, s)
        dialog.exec_()

    sys.excepthook = my_excepthook

install_exception()アプリケーションの起動時に呼び出します。

ErrorReportDialog私が作ったQtダイアログです。traceback.format_exception()Python のインタプリタと同じ方法で、except フックに渡される引数をフォーマットします。

編集:私はそれに少し落とし穴を言及するのを忘れていました. スレッドでは機能しません (少なくとも、前回チェックしたときは機能しませんでした)。別のスレッドで実行されるコードについては、try..exceptブロックでラップする必要があります。

于 2009-12-28T20:27:30.603 に答える
2

アプリケーションがクラッシュする可能性がある場所 (I/O、ネットワークなど) を除いて、試してみてください。except が呼び出されるたびに、古いウィンドウを強制終了する関数、新しい tkinter 通知ウィンドウを生成する関数、またはエラー メッセージを含むカスタムウィンドウを呼び出す関数を呼び出します。

新しいウィンドウで root.after を実行し、エラー レポート (urllib) を送信します。

必要に応じて再起動ボタンを配置します。

tkinter はそのタイプの GUI ではないため、クラッシュ レポート フレームワークはありません。これは、単純なコマンド ライン アプリのほとんどのラッパーです。

上のスクリーンショットに見られる機能が必要な場合は、pyqt/gtk または wxpython に移動します。しかし、どこへ行っても、自分のレポーターを書かなければならないことは確かです。

于 2009-12-28T06:25:25.243 に答える