Jak zamierzasz debugować błędy w Flasku? Wydrukować na konsoli? Wiadomości bezpośrednie na stronie? A może jest dostępna bardziej zaawansowana opcja, aby dowiedzieć się, co się dzieje, gdy coś pójdzie nie tak?
Nie ma w tym nic magicznego app.run()(zarówno z włączonym, jak i wyłączonym debugowaniem). Flask zachowuje się jak każda inna aplikacja w Pythonie, więc możesz ją debugować w ten sam sposób, w jaki debugujesz dowolną aplikację w Pythonie. Jeśli chcesz korzystać z logowania, użyj logowania. Jeśli chcesz drukować, używaj odbitek. Jeśli chcesz, możesz nawet użyć debugera.
Mark Hildreth
Odpowiedzi:
128
Uruchomienie aplikacji w trybie programistycznym spowoduje wyświetlenie interaktywnego śledzenia i konsoli w przeglądarce, gdy wystąpi błąd. Aby uruchomić w trybie programistycznym, ustaw FLASK_ENV=developmentzmienną środowiskową, a następnie użyj flask runpolecenia (pamiętaj, aby wskazać FLASK_APPrównież swoją aplikację).
W przypadku systemów Linux, Mac, Linux Subsystem dla Windows, Git Bash w systemie Windows itp .:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
W przypadku Windows CMD setzamiast eksportu użyj :
set FLASK_ENV=development
W przypadku programu PowerShell użyj $env:
$env:FLASK_ENV ="development"
Przed wersją Flask 1.0 było to kontrolowane przez FLASK_DEBUG=1zmienną środowiskową.
Jeśli używasz app.run()metody zamiast flask runpolecenia, przekaż, debug=Trueaby włączyć tryb debugowania.
Dane śledzenia są również drukowane na terminalu, na którym działa serwer, niezależnie od trybu programowania.
Jeśli używasz PyCharm, VS Code itp., Możesz skorzystać z jego debugera, aby przejść przez kod z punktami przerwania. Konfiguracja uruchamiania może wskazywać na wywołanie skryptu app.run(debug=True, use_reloader=False)lub wskazywać go na venv/bin/flaskskrypt i używać go tak, jak z wiersza poleceń. Możesz pozostawić przeładowanie wyłączone, ale przeładowanie zabije kontekst debugowania i będziesz musiał ponownie złapać punkt przerwania.
Możesz także użyć pdb, pudb lub innego debuggera terminala, wywołując set_tracewidok, w którym chcesz rozpocząć debugowanie.
Pamiętaj, aby nie używać zbyt szerokich z wyjątkiem bloków. Otoczenie całego kodu znakiem catch-all try... except...spowoduje wyciszenie błędu, który chcesz debugować. Ogólnie jest to niepotrzebne, ponieważ Flask będzie już obsługiwał wyjątki, pokazując debugger lub błąd 500 i drukując dane śledzenia do konsoli.
Właściwie, kiedy debug=Truebiegasz z tobą, faktycznie używasz debugera Werkzeug, więc nie jest to albo-albo ;-)
Sean Vieira
Ha, masz rację. Myślę, że powinienem był spojrzeć na plik setup.py Flaska, aby sprawdzić wymagania. Używam zmodyfikowanej kopii do pracy pod GAE, gdzie trzeba ręcznie zainicjować Werkzeug.
bnlucas
Ustawiłem app.run (debug = True), jeśli wydrukuję xyz, gdzie to drukuje, dzięki
Kimmy
Użycie print 'xyz'spowoduje wydrukowanie na konsoli. Jeśli chcesz debugować w przeglądarce, będziesz musiał wymusić błąd w miejscu, w którym chcesz debugować. raise Exception('xyz'). Spowoduje to wyświetlenie debugowania w oknie przeglądarki.
bnlucas
25
W 1.1.xdokumentacji możesz włączyć tryb debugowania, eksportując zmienną środowiskową do zachęty powłoki:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Ta odpowiedź byłaby bardziej pomocna, gdyby wyjaśniła, czym właściwie jest tryb debugowania. Czy to więcej niż umożliwia debugowanie w przeglądarce? Niestety, ponieważ pracuję nad REST API, to niewiele mi pomaga.
Michael Scheper,
Gdzie umieścić ten fragment?
mLstudent33
1
@ mLstudent33 w skorupce
Édouard Lopez
15
Można również użyć rozszerzenia Flask Debug Toolbar, aby uzyskać bardziej szczegółowe informacje osadzone na renderowanych stronach.
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>"
Czy możesz podzielić się przykładem działającej konfiguracji? Mam już zdefiniowaną FLASK_APP w moim env i domyślna konfiguracja nie będzie działać. Wypróbowałem ten - pastebin.com/v8hBQ2vv i kilka podobnych permutacji, ale bezskutecznie.
Brandon Dube
12
Jeśli chcesz debugować aplikację flask, po prostu przejdź do folderu, w którym znajduje się aplikacja flask. Nie zapomnij aktywować swojego wirtualnego środowiska i wkleić linie w konsoli zmień "mainfilename" na główny plik flask.
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Po włączeniu debugera dla aplikacji flask prawie każdy błąd zostanie wydrukowany na konsoli lub w oknie przeglądarki. Jeśli chcesz dowiedzieć się, co się dzieje, możesz użyć prostych instrukcji print lub też użyć console.log () dla kodu javascript.
Dla mnie nie działa ... ciągle pokazuje Tryb debugowania: wyłączony
Federico Gentile
3
Aby aktywować tryb debugowania w kolbie, po prostu wpisz set FLASK_DEBUG=1na swoim CMDdla systemu Windows i wyeksportuj FLASK_DEBUG=1na terminalu Linux, a następnie uruchom ponownie aplikację i gotowe!
app.run()
(zarówno z włączonym, jak i wyłączonym debugowaniem). Flask zachowuje się jak każda inna aplikacja w Pythonie, więc możesz ją debugować w ten sam sposób, w jaki debugujesz dowolną aplikację w Pythonie. Jeśli chcesz korzystać z logowania, użyj logowania. Jeśli chcesz drukować, używaj odbitek. Jeśli chcesz, możesz nawet użyć debugera.Odpowiedzi:
Uruchomienie aplikacji w trybie programistycznym spowoduje wyświetlenie interaktywnego śledzenia i konsoli w przeglądarce, gdy wystąpi błąd. Aby uruchomić w trybie programistycznym, ustaw
FLASK_ENV=development
zmienną środowiskową, a następnie użyjflask run
polecenia (pamiętaj, aby wskazaćFLASK_APP
również swoją aplikację).W przypadku systemów Linux, Mac, Linux Subsystem dla Windows, Git Bash w systemie Windows itp .:
W przypadku Windows CMD
set
zamiast eksportu użyj :W przypadku programu PowerShell użyj
$env
:Przed wersją Flask 1.0 było to kontrolowane przez
FLASK_DEBUG=1
zmienną środowiskową.Jeśli używasz
app.run()
metody zamiastflask run
polecenia, przekaż,debug=True
aby włączyć tryb debugowania.Dane śledzenia są również drukowane na terminalu, na którym działa serwer, niezależnie od trybu programowania.
Jeśli używasz PyCharm, VS Code itp., Możesz skorzystać z jego debugera, aby przejść przez kod z punktami przerwania. Konfiguracja uruchamiania może wskazywać na wywołanie skryptu
app.run(debug=True, use_reloader=False)
lub wskazywać go navenv/bin/flask
skrypt i używać go tak, jak z wiersza poleceń. Możesz pozostawić przeładowanie wyłączone, ale przeładowanie zabije kontekst debugowania i będziesz musiał ponownie złapać punkt przerwania.Możesz także użyć pdb, pudb lub innego debuggera terminala, wywołując
set_trace
widok, w którym chcesz rozpocząć debugowanie.Pamiętaj, aby nie używać zbyt szerokich z wyjątkiem bloków. Otoczenie całego kodu znakiem catch-all
try... except...
spowoduje wyciszenie błędu, który chcesz debugować. Ogólnie jest to niepotrzebne, ponieważ Flask będzie już obsługiwał wyjątki, pokazując debugger lub błąd 500 i drukując dane śledzenia do konsoli.źródło
Możesz użyć
app.run(debug=True)
do edycji Werkzeug Debugger, jak wspomniano poniżej, i powinienem był wiedzieć.źródło
debug=True
biegasz z tobą, faktycznie używasz debugera Werkzeug, więc nie jest to albo-albo ;-)print 'xyz'
spowoduje wydrukowanie na konsoli. Jeśli chcesz debugować w przeglądarce, będziesz musiał wymusić błąd w miejscu, w którym chcesz debugować.raise Exception('xyz')
. Spowoduje to wyświetlenie debugowania w oknie przeglądarki.W
1.1.x
dokumentacji możesz włączyć tryb debugowania, eksportując zmienną środowiskową do zachęty powłoki:źródło
Można również użyć rozszerzenia Flask Debug Toolbar, aby uzyskać bardziej szczegółowe informacje osadzone na renderowanych stronach.
Uruchom aplikację w następujący sposób:
źródło
Jeśli używasz Visual Studio Code, zamień
z
Pojawia się po włączeniu wewnętrznego debugera wyłącza debuger VS Code.
źródło
Jeśli chcesz debugować aplikację flask, po prostu przejdź do folderu, w którym znajduje się aplikacja flask. Nie zapomnij aktywować swojego wirtualnego środowiska i wkleić linie w konsoli zmień "mainfilename" na główny plik flask.
Po włączeniu debugera dla aplikacji flask prawie każdy błąd zostanie wydrukowany na konsoli lub w oknie przeglądarki. Jeśli chcesz dowiedzieć się, co się dzieje, możesz użyć prostych instrukcji print lub też użyć console.log () dla kodu javascript.
źródło
Zainstaluj
python-dotenv
w swoim wirtualnym środowisku.Utwórz plik .flaskenv w katalogu głównym projektu. Przez katalog główny projektu rozumiem folder zawierający plik app.py
Wewnątrz tego pliku napisz:
Teraz wydaj następujące polecenie:
źródło
Aby aktywować tryb debugowania w kolbie, po prostu wpisz set
FLASK_DEBUG=1
na swoimCMD
dla systemu Windows i wyeksportujFLASK_DEBUG=1
na terminalu Linux, a następnie uruchom ponownie aplikację i gotowe!źródło
Szybka wskazówka - jeśli używasz PyCharm, przejdź do
Edit Configurations
=>Configurations
i włączFLASK_DEBUG
pole wyboru, uruchom ponownieRun
.źródło
Korzystaj z loggerów i drukuj instrukcje w środowisku programistycznym, możesz przejść do wartownika w przypadku środowisk produkcyjnych.
źródło
Użytkownicy systemu Windows:
Otwórz program PowerShell i przejdź do katalogu projektu.
Użyj tych poleceń w Powershell, wszystkie inne rzeczy nie będą działać w Powershell.
źródło
Jeśli uruchamiasz go lokalnie i chcesz mieć możliwość przechodzenia przez kod:
python -m pdb script.py
źródło