175 votes

Comment déboguer une application Flask

Comment déboguer les erreurs dans Flask ? Imprimer dans la console ? En envoyant des messages flash sur la page ? Ou existe-t-il une option plus puissante pour comprendre ce qui se passe quand quelque chose ne va pas ?

175voto

davidism Points 5946

L'exécution de l'application en mode développement affichera un retour de trace interactif et une console dans le navigateur en cas d'erreur. Pour fonctionner en mode développement, définissez l'option FLASK_ENV=development puis utilisez la variable d'environnement flask run (n'oubliez pas de pointer FLASK_APP à votre application également).

Pour Linux, Mac, Sous-système Linux pour Windows, Git Bash sur Windows, etc :

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Pour le CMD de Windows, utilisez set au lieu de l'exportation :

set FLASK_ENV=development

Pour PowerShell, utilisez $env :

$env:FLASK_ENV = "development"

Avant Flask 1.0, ceci était contrôlé par la fonction FLASK_DEBUG=1 à la place.

Si vous utilisez le app.run() au lieu de la méthode flask run commande, passe debug=True pour activer le mode débogage.

Les traces sont également imprimées sur le terminal qui exécute le serveur, quel que soit le mode de développement.

Si vous utilisez PyCharm, VS Code, etc., vous pouvez profiter de son débogueur pour parcourir le code avec des points d'arrêt. La configuration d'exécution peut pointer vers un script qui appelle app.run(debug=True, use_reloader=False) ou le pointer vers le venv/bin/flask script et l'utiliser comme vous le feriez à partir de la ligne de commande. Vous pouvez laisser le reloader désactivé, mais un rechargement tuera le contexte de débogage et vous devrez attraper un point d'arrêt à nouveau.

Vous pouvez également utiliser pdb, pudb, ou un autre débogueur de terminal en appelant set_trace dans la vue où vous voulez commencer le débogage.


Veillez à ne pas utiliser des blocs d'exception trop larges. Entourer tout votre code d'un bloc attrape-tout try... except... fera taire l'erreur que vous voulez déboguer. Ce n'est pas nécessaire en général, puisque Flask gère déjà les exceptions en affichant le débogueur ou une erreur 500 et en imprimant le retour de trace sur la console.

49voto

bnlucas Points 1464

Vous pouvez utiliser app.run(debug=True) pour le Outil Débogueur modifier comme mentionné ci-dessous, et j'aurais dû le savoir.

33voto

Édouard Lopez Points 2762

De la 1.1.x documentation vous pouvez activer le mode débogage en exportant une variable d'environnement à l'invite de votre shell :

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

23voto

turdus-merula Points 4230

On peut également utiliser le Barre d'outils de débogage Flask pour obtenir des informations plus détaillées intégrées dans les pages rendues.

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import 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>"

Démarrez l'application comme suit :

FLASK_APP=main.py FLASK_DEBUG=1 flask run

16voto

Eman4real Points 93

Si vous utilisez Visual Studio Code, remplacez

app.run(debug=True)

avec

app.run()

Il apparaît lorsque l'activation du débogueur interne désactive le débogueur de VS Code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X