Catch-all gestore di eccezioni globale in App Engine per Python
-
28-09-2019 - |
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.
Soluzione
Sì, è possibile. Ereporter riporterà due tipi di eccezioni: 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. Ecco un semplice esempio di classe BaseHandler:
È 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
logging.exception('Your handled exception')
Dai un'occhiata al personalizzate Risposte agli errori anche. 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