Catching ein 500 Server Fehler in Flask

Ich liebe Flask's Fehler beim Fangen. Es ist schön einfach:

@app.errorhandler(404) def pageNotFound(error): return "page not found" 

Arbeitet wie Charme. Aber es funktioniert nicht für den 500 Fehlercode. Ich möchte Python-Fehler zu fangen, wenn etwas schief geht eine Ausnahme wird in den Code erhoben. Ist das möglich?

Ich sollte beachten, dass, wenn ich explizit return abort(500) in einer Ansicht, dann die 500 Fehlerhandler funktioniert. Das ist also explizit, wenn der Python-Code fehlschlägt.

Ist das möglich?

  • Flasche: Umleiten von Argumenten?
  • Wie bekomme ich den User Agent mit Flask?
  • Wie organisiere ich eine relativ große Flaschenanwendung?
  • Python Flask, wie man den Inhaltstyp festlegt
  • Flasche ('Anwendung') gegen Flasche (__ name__)
  • Hintergrund Arbeiter mit Flasche
  • 4 Solutions collect form web for “Catching ein 500 Server Fehler in Flask”

    Was Sie beschrieben haben, ist standardmäßig, wie Flask arbeitet. Meine Annahme ist, dass Sie im Debug-Modus laufen, und deshalb werden Ausnahmen im Debug-Bildschirm angezeigt. Vergewissern Sie sich, dass der Debug-Modus ausgeschaltet ist, und versuchen Sie es erneut. Hier ist ein Kommentar direkt aus dem Code selbst:

    Standard-Ausnahmebehandlung, die eintritt, wenn eine Ausnahme auftritt, die nicht gefangen wird. Im Debug-Modus wird die Exception sofort wieder aufgehoben, sonst wird es protokolliert und der Handler für einen 500 internen Serverfehler wird verwendet. Wenn kein solcher Handler vorhanden ist, wird eine standardmäßige 500 interne Server-Fehlermeldung angezeigt.

    Es funktioniert gut in meiner Seite:

     from flask import Flask ,url_for,render_template,request,abort from werkzeug.debug import get_current_traceback app = Flask(__name__) @app.route('/') def index(): try: raise Exception("Can't connect to database") except Exception,e: track= get_current_traceback(skip=1, show_hidden_frames=True, ignore_system_exceptions=False) track.log() abort(500) return "index" @app.errorhandler(500) def internal_error(error): return "500 error" @app.errorhandler(404) def not_found(error): return "404 error",404 if __name__== "__main__": app.run(debug=True) 

    Flask wird den Fehlercode nicht für Sie festlegen, also stellen Sie sicher, dass Sie auch den HTTP-Statuscode bereitstellen, wenn Sie eine Antwort zurückgeben.

    Hier ist mein Code snippt

     @app.route('/') def index(): raise Exception("Can't connect to database") @app.errorhandler(Exception) def exception_handler(error): return "!!!!" + repr(error) 

    Meine Lösung dazu war, die Ausbreitung von Ausnahmen zu aktivieren, indem du das Konfigurationswörterbuch änderst:

     app = Flask(__name__) ... app.config['PROPAGATE_EXCEPTIONS'] = True 

    Schau dir diese andere Frage an: Flasche App hebt einen 500 Fehler ohne Ausnahme an

    Python ist die beste Programmiersprache der Welt.