2013-11-28 8 views
8

Vielleicht sehe ich nichts in der documentation.Wie alle Ausnahmen in der Flasche abgefangen werden?

Ich möchte nicht nur einige http Fehler behandeln, aber alle Ausnahmen. Der Grund - ich möchte sie mit meiner eigenen Logik loggen (hört sich an wie das Rad neu erfinden, aber ich brauche die volle Kontrolle über das Logging. Ich möchte den Server nicht wegen einer Ausnahme in die Knie zwingen, sondern nur diese spezielle Anfrage bombardieren .

Dies ist, wie ich Flask starten. Hier arbeiten app.run den Server startet. Wie kann ich ihn anweisen, meine Exception-Handler-Methode aufrufen, wenn eine Ausnahme?

def main(): 
    args = parse_args() 
    app.config['PROPAGATE_EXCEPTIONS'] = True 
    flask_options = {'port' : args.port} 
    if args.host == 'public': 
     flask_options['host'] = '0.0.0.0' 
    app.run(**flask_options) 

if __name__ == '__main__': 
    _sys.exit(main()) 

Antwort

14

Sie errorhandler auftritt verwenden sollten, siehe Dokumentation http://flask.pocoo.org/docs/patterns/errorpages/#error-handlers und http://flask.pocoo.org/docs/api/#flask.Flask.errorhandler. Es ist möglich, alle Ausnahmen in Dispatcher ausgelöst zu bekommen, aber keine Ausnahmen in Fehlerhandlern zu behandeln le alle Ausnahmen:

Wie auch immer ich bevorzuge explizite Ausnahmen Handler oder Dekoratoren (klassenbasierte Ansichten) für diese Fälle verwenden.

+2

Dies funktioniert in den letzten Versionen nicht mehr. In 0.12 bekomme ich wieder HTML-Fehlerseiten. – bwind

+0

@bwind Irgendeine Idee, wie Sie ähnliche Logik in 0.12 dann implementieren sollten? –

+0

@TuukkaMustonen: Ja, siehe meine Antwort auf eine andere Frage hier: http://stackoverflow.com/questions/29332056/global-error-handler-for-any-exception/41655397#41655397 – bwind

Verwandte Themen