Wie soll man Fehler in Flask debuggen? Auf der Konsole ausgeben? Meldungen auf der Seite ausgeben? Oder gibt es eine leistungsfähigere Option, um herauszufinden, was passiert, wenn etwas schief läuft?
Wenn Sie die Anwendung im Entwicklungsmodus ausführen, werden im Browser ein interaktiver Traceback und eine Konsole angezeigt, wenn ein Fehler auftritt. Um im Entwicklungsmodus zu starten, setzen Sie die Umgebungsvariable FLASK_ENV=development
und verwenden Sie dann den Befehl flask run
(denken Sie daran, auch FLASK_APP
auf Ihre Anwendung zu setzen).
Für Linux, Mac, Linux Subsystem für Windows, Git Bash unter Windows, usw.:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Für Windows CMD, verwenden Sie set
anstelle von export:
set FLASK_ENV=development
Für PowerShell, verwenden Sie $env
:
$env:FLASK_ENV = "development"
Vor Flask 1.0 wurde dies stattdessen durch die Umgebungsvariable FLASK_DEBUG=1
gesteuert.
Wenn Sie die Methode app.run()
anstelle des Befehls flask run
verwenden, übergeben Sie debug=True
, um den Debug-Modus zu aktivieren.
Tracebacks werden auch auf dem Terminal ausgegeben, auf dem der Server läuft, unabhängig vom Entwicklungsmodus.
Wenn Sie PyCharm, VS Code, etc. verwenden, können Sie deren Debugger nutzen, um mit Haltepunkten durch den Code zu gehen. Die Ausführungskonfiguration kann auf ein Skript verweisen, das app.run(debug=True, use_reloader=False)
aufruft, oder auf das Skript venv/bin/flask
verweisen und es so verwenden, wie Sie es von der Kommandozeile aus tun würden. Sie können den Reloader deaktiviert lassen, aber ein erneutes Laden wird den Debugging-Kontext beenden und Sie müssen erneut einen Haltepunkt setzen.
Sie können auch pdb, pudb oder einen anderen Terminal-Debugger verwenden, indem Sie set_trace
in der Ansicht aufrufen, in der Sie mit dem Debuggen beginnen wollen.
Achten Sie darauf, keine zu weiten Except-Blöcke zu verwenden. Wenn Sie Ihren gesamten Code mit dem Aufhänger try... except...
umgeben, wird der Fehler, den Sie debuggen wollen, verschwinden. Das ist im Allgemeinen unnötig, da Flask bereits Ausnahmen behandelt, indem es den Debugger oder einen 500-Fehler anzeigt und den Traceback auf der Konsole ausgibt.
Sie können app.run(debug=True)
für den Werkzeug-Debugger edit verwenden, wie unten erwähnt, und ich hätte es wissen müssen.
In der 0.11
-Dokumentation können Sie den Debug-Modus aktivieren, indem Sie eine Umgebungsvariable exportieren:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0