Gibt es eine Möglichkeit, einen globalen Catch-All-Fehlerhandler hinzuzufügen, in dem ich die Antwort auf eine generische JSON-Antwort ändern kann?Globaler Fehlerhandler für jede Ausnahme
Ich kann das Signal got_request_exception
nicht verwenden, da die Antwort nicht geändert werden darf (http://flask.pocoo.org/docs/0.10/signals/).
Im Gegensatz dazu werden alle Signalhandler in nicht definierter Reihenfolge ausgeführt und verändern keine Daten.
Ich würde es vorziehen, nicht die app.handle_exception
-Funktion als das Gefühl wie interne API wickeln. Ich glaube, ich bin nach so etwas wie:
@app.errorhandler()
def handle_global_error(e):
return "Global error"
Notiere die errorhandler
keine Parameter nehmen, was bedeutet, es würde alle Ausnahmen/Statuscodes fangen, die nicht einen bestimmten Fehler-Handler an ihnen hat. Ich weiß, dass ich errorhandler(500)
oder errorhandler(Exception)
verwenden kann, um Ausnahmen zu fangen, aber wenn ich zum Beispiel abort(409)
mache, wird es immer noch eine HTML-Antwort zurückgeben.
Das ist so seltsam. Ich kopiere deinen Code in eine Python-Shell mit Flask 0.10.1 und bekomme trotzdem HTML-Fehler, wenn ich diese Endpunkte mit curl anfordere. Welche Version von Flask benutzt du? – joscarsson
Ah, anscheinend hat sich etwas zwischen 0.10.1 und der Version von git geändert, mit der ich es getestet habe. – ThiefMaster
https://github.com/mitsuhoho/flask/blob/0.10.1/flask/app.py#L1086 - anscheinend verwendet es nur den Code der Ausnahme in älteren Versionen. – ThiefMaster