6

Python を使用して Google App Engine でキャッチオール グローバル例外ハンドラを作成することは可能ですか?

基本的に、キャッチされていないすべての例外をキャッチして適切に処理し、トレースバックを含むメールを送信したいと考えています。

現在、キャッチされていないすべてのエラーについて、コードのスニペットを含むスタック トレースがユーザーに表示されます。これは望ましくありません。

4

3 に答える 3

11

はい、可能です。アプリケーションから例外レポートを電子メールで受け取ることができるereporter
パッケージを 使用して、これを行うことができます。

Ereporter は 2 種類の例外を報告します。

  • ログに記録された例外logging.exception('Your handled exception')
  • キャッチされていない例外

すべての例外をキャッチするには、 handle_exception()メソッドをオーバーライドするカスタム BaseHandler クラスを作成します。すべてのリクエスト ハンドラは、この基本クラスから継承する必要があります。Custom Error Responses
も 参照してください。

BaseHandler クラスの簡単な例を次に示します。

class BaseHandler(webapp.RequestHandler):

    def handle_exception(self, exception, debug_mode):
        if debug_mode:
            webapp.RequestHandler.handle_exception(self, exception, debug_mode)
        else:
            logging.exception(exception)
            self.error(500)
            self.response.out.write(template.render('templdir/error.html', {}))
于 2010-11-28T12:09:48.463 に答える
1

BaseHandler で次のように呼び出して、元の handle_exception を呼び出したい場合があります。

webapp.RequestHandler.handle_exception(self, exception, debug_mode)

ここに文脈があります。

from google.appengine.ext import webapp
import sys
import traceback

class BaseHandler(webapp.RequestHandler):
    def handle_exception(self, exception, debug_mode):
        from main import emaildevs
        emaildevs('An error occurred on example.com', ''.join(traceback.format_exception(*sys.exc_info())))
        webapp.RequestHandler.handle_exception(self, exception, debug_mode)
于 2011-04-11T07:02:31.720 に答える
-4

試してみてください: 次を除いて呼び出します: sendemail

http://docs.python.org/tutorial/errors.html

于 2010-11-28T11:46:13.463 に答える