2016-06-02 7 views
1

Wenn eine Funktion mit before_request Flask erklärt schluckt HTTPExceptions und Pflanzgut sie nicht:Flask Httpexception verschluckt

from flask import Flask 
from werkzeug.exceptions import HTTPException 

app = Flask(__name__) 

@app.before_request 
def f(): 
    raise HTTPException("This is not propagated") 

@app.route('/') 
def test(): 
    return 'This is a view' 


if __name__ == '__main__': 
    app.run() 

Die Konsole zeigt keine Ausnahme:

$ python flask_test1.py 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
127.0.0.1 - - [02/Jun/2016 15:01:31] "GET/HTTP/1.1" 200 - 

Der Browser zeigt:

Unknown Error 

This is not propagated 

Gibt es eine Möglichkeit, es zu erzwingen? Eine Einstellung, die ich spezifizieren muss, oder sollte ich Werkzeug HTTPExceptions einbinden und benutzerdefinierte Exceptions auslösen?

+0

Sie sehen also * „Dies ist eine Ansicht“ *, wenn Sie zu diesem Endpunkt sehen? Oder erhalten Sie einen HTTP-Fehlercode/einige Fehlerseite (was ist das erwartete Verhalten)? – jonrsharpe

+0

@jonrsharpe bearbeitet – PepperoniPizza

+0

Und warum ist das nicht das Ergebnis, das Sie erwartet haben? Das soll passieren! Siehe http://werkzeug.pocoo.org/docs/0.11/exceptions/ – jonrsharpe

Antwort

-1

Der wahrscheinliche Grund ist nicht, dass Sie nicht selbst HTTPException auslösen sollen. HTTPException ist selbst eine Basisklasse für andere Ausnahmen, wie BadRequest oder NotFound.

Da keinen HTTP-Code zum Zurückgeben hat, wird kein solcher Code protokolliert oder an den Benutzer gesendet. Wenn Sie erhöhen NotFound, BadRequest, oder eine der Unterklassen von Httpexception, diejenigen funktionieren, zumindest in Flask 0.11:

from werkzeug.exceptions import BadRequest 
@app.before_request 
def f(): 
    raise BadRequest("This is definitely propagated") 
+0

Aber das wird in genau der gleichen Weise propagiert *, erscheint als eine Nicht-2xx-Rückkehr im Browser, anstatt das Programm zu stürzen und eine Rückverfolgung zu zeigen . Das Problem hier ist nicht die Verwendung von 'HTTPException', da das OP nicht versteht, wie diese Fehler funktionieren sollen. – jonrsharpe