2016-10-17 3 views
3

Ich benutze Flask Restful, um eine API zu erstellen. Ich habe eine Reihe von Modellklassen mit Methoden, die benutzerdefinierte Ausnahmen auslösen können (Beispiel: AuthFailed-Ausnahme für meine Benutzermodellklasse). Ich benutze die benutzerdefinierte Fehlerbehandlung, dokumentierte here, um dies zu behandeln (so dass wenn Authentifizierung fehlschlägt, eine entsprechende Antwort gesendet wird). So weit, ist es gut. Allerdings merke ich, dass, wenn die Ausnahme ausgelöst wird, obwohl die richtige Antwort JSON und Status zurückgesendet wird, ich immer noch eine Traceback bekomme, die nicht ideal ist. Wenn ich einen Fehler (außerhalb von flask) mit einem try-except-Block behandle, kann der except normalerweise den Fehler auffangen und behandeln (wodurch die Rückverfolgung verhindert wird). Was ist der richtige Ansatz hier? Missverstehe ich, wie die Fehlerfunktion verwendet wird?Flask restful - Exception handling traceback?

Antwort

1

Leider für Sie ist es auf diese Weise "by Design" der Flask-RESTful APIs errors Funktionalität behandelt. Die ausgelösten Ausnahmen werden protokolliert, und die entsprechende Antwort, die in errors dict definiert ist, wird zurückgegeben.

Sie können jedoch das Niveau der Protokollausgabe ändern, indem Sie die Protokollebene von Flask des Loggers wie folgt ändern:

app = Flask(__name__) 
app.logger.setLevel(logging.CRITICAL) 

Ich glaube, Sie würden es tatsächlich zu CRITICAL gesetzt haben, weil diese Fehler weiterhin protokolliert immer sogar auf Log-Level soweit ich weiß.

Darüber hinaus sind Flask und Flask-RESTful Open-Source. Nachdem ich mir den Code angesehen habe, habe ich the function of a Flask app that is responsible for adding the exception traceback to the log (Flask Version 0.11.1) gefunden. Natürlich könnten Sie auch Ihre eigene App Klasse erstellen (die die ursprüngliche Klasse von Flask erweitert), die diese Methode (oder einen Aufrufer davon) überschreibt und stattdessen etwas anderes tut. Sie sollten jedoch vorsichtig sein, wenn Sie Ihre Flask-Version aktualisieren, wenn Sie nicht dokumentierte Sachen wie diese verwenden.

+0

Hmm ok. Es ist seltsam, dass es keine Möglichkeit gibt, Fehler zu vermeiden, die protokolliert werden (unabhängig vom Fehlerlevel), wenn sie angemessen behandelt werden! Aber gut. – guywhoneedsahand

+0

Leider habe ich bei der Arbeit mit Flask (-RESTful) noch nichts gesehen. Ich habe mir aber nochmal den Quellcode von Flask (-RESTful) angeschaut und etwas gefunden, das dir auch helfen könnte, das zu erreichen, was du willst (und meine Antwort auf ein akzeptables Level zu erhöhen: P). – mxscho