Domanda

E 'possibile creare un catch-all gestore di eccezioni globale in Google App Engine utilizzando Python?

In sostanza, voglio prendere tutte le eccezioni non-pescato e con grazia gestirlo, mentre l'invio di una e-mail con il traceback a me.

Al momento, per tutti gli errori non rilevati, gli utenti vedere uno stacktrace con un frammento di codice in esso. Questo è indesiderabile.

È stato utile?

Soluzione

Sì, è possibile.
È possibile farlo utilizzando la href="http://code.google.com/intl/it/appengine/articles/python/recording_exceptions_with_ereporter.html" rel="noreferrer"> ereporter pacchetto che permette di

Ereporter riporterà due tipi di eccezioni:

  • eccezioni registrato con logging.exception('Your handled exception')
  • tutte le eccezioni non gestite fanno

Per catturare tutte le eccezioni, vorrei creare una classe personalizzata BaseHandler sovrascrivendo il handle_exception () metodo ; tutti i gestori delle richieste devono ereditare da questa classe di base.
Dai un'occhiata al personalizzate Risposte agli errori anche.

Ecco un semplice esempio di classe 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', {}))

Altri suggerimenti

Si potrebbe desiderare di chiamare il handle_exception originale chiamando il seguente nel BaseHandler:

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

Qui è in contesto.

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)

Prova:   chiamata ad eccezione di:   SendEmail

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top