Wie sollen Sie Fehler in Flask debuggen? Auf die Konsole drucken? Flash-Nachrichten auf die Seite? Oder gibt es eine leistungsfähigere Option, um herauszufinden, was passiert, wenn etwas schief geht?
Es gibt nichts Magisches app.run()(entweder mit aktiviertem oder deaktiviertem Debug). Flask verhält sich wie jede andere Python-Anwendung, sodass Sie es genauso debuggen können wie jede Python-Anwendung. Wenn Sie die Protokollierung verwenden möchten, verwenden Sie die Protokollierung. Wenn Sie drucken möchten, verwenden Sie Drucke. Sie können sogar einen Debugger verwenden, wenn Sie möchten.
Mark Hildreth
Antworten:
128
Wenn Sie die App im Entwicklungsmodus ausführen, werden im Fehlerfall ein interaktives Traceback und eine Konsole im Browser angezeigt. Um im Entwicklungsmodus ausgeführt zu werden, legen Sie die FLASK_ENV=developmentUmgebungsvariable fest und verwenden Sie den flask runBefehl (denken Sie daran, auch FLASK_APPauf Ihre App zu zeigen).
Für Linux, Mac, Linux-Subsystem für Windows, Git Bash unter Windows usw.:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Verwenden Sie für Windows CMD setanstelle des Exports:
set FLASK_ENV=development
Verwenden Sie für PowerShell $env:
$env:FLASK_ENV ="development"
Vor Flask 1.0 wurde dies FLASK_DEBUG=1stattdessen von der Umgebungsvariablen gesteuert .
Wenn Sie die app.run()Methode anstelle des flask runBefehls verwenden, übergeben Sie debug=True, um den Debug-Modus zu aktivieren.
Tracebacks werden unabhängig vom Entwicklungsmodus auch auf dem Terminal gedruckt, auf dem der Server ausgeführt wird.
Wenn Sie PyCharm, VS-Code usw. verwenden, können Sie den Debugger nutzen, um den Code mit Haltepunkten zu durchlaufen. Die Ausführungskonfiguration kann auf einen Skriptaufruf app.run(debug=True, use_reloader=False)verweisen oder auf das venv/bin/flaskSkript verweisen und es wie in der Befehlszeile verwenden. Sie können den Reloader deaktiviert lassen, aber ein Neuladen beendet den Debugging-Kontext und Sie müssen erneut einen Haltepunkt abfangen.
Sie können auch pdb, pudb oder einen anderen Terminal-Debugger verwenden, indem Sie set_tracedie Ansicht aufrufen, in der Sie mit dem Debuggen beginnen möchten.
Verwenden Sie nur Blöcke mit Ausnahme von Blöcken. Wenn Sie Ihren gesamten Code mit einem Catch-All umgeben, try... except...wird der Fehler, den Sie debuggen möchten, stummgeschaltet. Dies ist im Allgemeinen nicht erforderlich, da Flask bereits Ausnahmen behandelt, indem der Debugger oder ein 500-Fehler angezeigt und der Traceback auf der Konsole gedruckt wird.
Wenn Sie mit laufen, verwenden debug=TrueSie tatsächlich den Werkzeug-Debuger, also ist es kein Entweder-Oder ;-)
Sean Vieira
Ha, du hast recht. Ich denke, ich hätte Flask's setup.py nach Anforderungen durchsuchen sollen. Ich verwende eine modifizierte Kopie davon, um unter GAE zu arbeiten, wo Sie Werkzeug manuell initialisieren müssen.
Bnlucas
Ich habe app.run (debug = True) gesetzt, wenn ich xyz drucke, wohin druckt es, danke
Kimmy
Mit print 'xyz'wird auf der Konsole gedruckt. Wenn Sie im Browser debuggen möchten, müssen Sie einen Fehler erzwingen, an dem Sie debuggen möchten. raise Exception('xyz'). Dies löst die Ausgabe des Debugs im Browserfenster aus.
Bnlucas
25
In der 1.1.xDokumentation können Sie den Debug-Modus aktivieren, indem Sie eine Umgebungsvariable in Ihre Shell-Eingabeaufforderung exportieren:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Diese Antwort wäre hilfreicher, wenn sie erklären würde, was der Debug-Modus tatsächlich ist. Ist mehr möglich, als das Debuggen im Browser zuzulassen? Da ich an einer REST-API arbeite, hilft mir das leider nicht viel.
Michael Scheper
Wo lege ich das Snippet ab?
mLstudent33
1
@ mLstudent33 in einer Shell
Édouard Lopez
15
Sie können auch die Erweiterung der Flask Debug-Symbolleiste verwenden , um detailliertere Informationen in gerenderte Seiten einzubetten.
from flask importFlaskfrom flask_debugtoolbar importDebugToolbarExtensionimport logging
app =Flask(__name__)
app.debug =True
app.secret_key ='development key'
toolbar =DebugToolbarExtension(app)@app.route('/')def index():
logging.warning("See this message in Flask Debug Toolbar!")return"<html><body></body></html>"
Können Sie ein Beispiel für ein funktionierendes Setup nennen? Ich habe FLASK_APP bereits in meiner Umgebung definiert und die Standardkonfiguration würde nicht funktionieren. Ich habe dieses versucht - pastebin.com/v8hBQ2vv und eine Reihe ähnlicher Permutationen, aber ohne Erfolg.
Brandon Dube
12
Wenn Sie Ihre Kolben-App debuggen möchten, gehen Sie einfach zu dem Ordner, in dem sich die Kolben-App befindet. Vergessen Sie nicht, Ihre virtuelle Umgebung zu aktivieren und die Zeilen in die Konsole einzufügen. Ändern Sie "mainfilename" in flask main file.
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Nachdem Sie Ihren Debugger für die Flask-App aktiviert haben, wird fast jeder Fehler auf der Konsole oder im Browserfenster gedruckt. Wenn Sie herausfinden möchten, was passiert, können Sie einfache print-Anweisungen verwenden oder auch console.log () für Javascript-Code verwenden.
Funktioniert nicht für mich ... es wird weiterhin der Debug-Modus angezeigt: Aus
Federico Gentile
3
Um den Debug-Modus in flask zu aktivieren, geben Sie einfach set FLASK_DEBUG=1on your CMDfor windows ein und exportieren FLASK_DEBUG=1unter Linux termial. Starten Sie dann Ihre App neu und los geht's!
Kurztipp - Wenn Sie einen PyCharm verwenden, gehen Sie zu Edit Configurations=> Configurationsund aktivieren Sie das FLASK_DEBUGKontrollkästchen. Starten Sie das neu Run.
app.run()
(entweder mit aktiviertem oder deaktiviertem Debug). Flask verhält sich wie jede andere Python-Anwendung, sodass Sie es genauso debuggen können wie jede Python-Anwendung. Wenn Sie die Protokollierung verwenden möchten, verwenden Sie die Protokollierung. Wenn Sie drucken möchten, verwenden Sie Drucke. Sie können sogar einen Debugger verwenden, wenn Sie möchten.Antworten:
Wenn Sie die App im Entwicklungsmodus ausführen, werden im Fehlerfall ein interaktives Traceback und eine Konsole im Browser angezeigt. Um im Entwicklungsmodus ausgeführt zu werden, legen Sie die
FLASK_ENV=development
Umgebungsvariable fest und verwenden Sie denflask run
Befehl (denken Sie daran, auchFLASK_APP
auf Ihre App zu zeigen).Für Linux, Mac, Linux-Subsystem für Windows, Git Bash unter Windows usw.:
Verwenden Sie für Windows CMD
set
anstelle des Exports:Verwenden Sie für PowerShell
$env
:Vor Flask 1.0 wurde dies
FLASK_DEBUG=1
stattdessen von der Umgebungsvariablen gesteuert .Wenn Sie die
app.run()
Methode anstelle desflask run
Befehls verwenden, übergeben Siedebug=True
, um den Debug-Modus zu aktivieren.Tracebacks werden unabhängig vom Entwicklungsmodus auch auf dem Terminal gedruckt, auf dem der Server ausgeführt wird.
Wenn Sie PyCharm, VS-Code usw. verwenden, können Sie den Debugger nutzen, um den Code mit Haltepunkten zu durchlaufen. Die Ausführungskonfiguration kann auf einen Skriptaufruf
app.run(debug=True, use_reloader=False)
verweisen oder auf dasvenv/bin/flask
Skript verweisen und es wie in der Befehlszeile verwenden. Sie können den Reloader deaktiviert lassen, aber ein Neuladen beendet den Debugging-Kontext und Sie müssen erneut einen Haltepunkt abfangen.Sie können auch pdb, pudb oder einen anderen Terminal-Debugger verwenden, indem Sie
set_trace
die Ansicht aufrufen, in der Sie mit dem Debuggen beginnen möchten.Verwenden Sie nur Blöcke mit Ausnahme von Blöcken. Wenn Sie Ihren gesamten Code mit einem Catch-All umgeben,
try... except...
wird der Fehler, den Sie debuggen möchten, stummgeschaltet. Dies ist im Allgemeinen nicht erforderlich, da Flask bereits Ausnahmen behandelt, indem der Debugger oder ein 500-Fehler angezeigt und der Traceback auf der Konsole gedruckt wird.quelle
Sie können
app.run(debug=True)
für die Werkzeug Debugger- Bearbeitung wie unten erwähnt verwenden, und ich hätte es wissen müssen.quelle
debug=True
Sie tatsächlich den Werkzeug-Debuger, also ist es kein Entweder-Oder ;-)print 'xyz'
wird auf der Konsole gedruckt. Wenn Sie im Browser debuggen möchten, müssen Sie einen Fehler erzwingen, an dem Sie debuggen möchten.raise Exception('xyz')
. Dies löst die Ausgabe des Debugs im Browserfenster aus.In der
1.1.x
Dokumentation können Sie den Debug-Modus aktivieren, indem Sie eine Umgebungsvariable in Ihre Shell-Eingabeaufforderung exportieren:quelle
Sie können auch die Erweiterung der Flask Debug-Symbolleiste verwenden , um detailliertere Informationen in gerenderte Seiten einzubetten.
Starten Sie die Anwendung wie folgt:
quelle
Wenn Sie Visual Studio Code verwenden, ersetzen Sie
mit
Beim Einschalten des internen Debuggers wird der VS-Code-Debugger deaktiviert.
quelle
Wenn Sie Ihre Kolben-App debuggen möchten, gehen Sie einfach zu dem Ordner, in dem sich die Kolben-App befindet. Vergessen Sie nicht, Ihre virtuelle Umgebung zu aktivieren und die Zeilen in die Konsole einzufügen. Ändern Sie "mainfilename" in flask main file.
Nachdem Sie Ihren Debugger für die Flask-App aktiviert haben, wird fast jeder Fehler auf der Konsole oder im Browserfenster gedruckt. Wenn Sie herausfinden möchten, was passiert, können Sie einfache print-Anweisungen verwenden oder auch console.log () für Javascript-Code verwenden.
quelle
Installieren Sie
python-dotenv
in Ihrer virtuellen Umgebung.Erstellen Sie eine .flaskenv in Ihrem Projektstamm. Mit Projektstamm meine ich den Ordner, in dem sich Ihre Datei app.py befindet
Schreiben Sie in diese Datei Folgendes:
Geben Sie nun den folgenden Befehl ein:
quelle
Um den Debug-Modus in flask zu aktivieren, geben Sie einfach set
FLASK_DEBUG=1
on yourCMD
for windows ein und exportierenFLASK_DEBUG=1
unter Linux termial. Starten Sie dann Ihre App neu und los geht's!quelle
Kurztipp - Wenn Sie einen PyCharm verwenden, gehen Sie zu
Edit Configurations
=>Configurations
und aktivieren Sie dasFLASK_DEBUG
Kontrollkästchen. Starten Sie das neuRun
.quelle
Verwenden Sie Logger und Druckanweisungen in der Entwicklungsumgebung. In Produktionsumgebungen können Sie Wachposten einsetzen.
quelle
Für Windows-Benutzer:
Öffnen Sie Powershell und CD in Ihr Projektverzeichnis.
Verwenden Sie diese Kommandos in Powershell, alle anderen Dinge funktionieren in Powershell nicht.
quelle
Wenn Sie es lokal ausführen und den Code schrittweise ausführen möchten:
python -m pdb script.py
quelle