Flaskではどのようにエラーをデバッグするのでしょうか? コンソールに出力しますか? ページにメッセージを表示しますか? それとも、何かがうまくいかないときに何が起こっているのかを把握するための、もっと強力なオプションがあるのでしょうか?
開発モードでアプリを実行すると、エラーが発生したときにブラウザにインタラクティブなトレースバックとコンソールが表示されます。開発モードで実行するには、環境変数FLASK_ENV=development
を設定してから、flask run
コマンドを使用します(FLASK_APP
に自分のアプリを指定することも忘れないでください)。
Linux、Mac、WindowsのLinux Subsystem、WindowsのGit Bashなどに対応しています。
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
WindowsのCMDでは、exportの代わりにset
を使用してください。
set FLASK_ENV=development
PowerShellでは、$env
を使用します。
$env:FLASK_ENV = "development"
Flask 1.0より前のバージョンでは、これは代わりに環境変数FLASK_DEBUG=1
で制御されていました。
もしあなたが flask run
コマンドの代わりに app.run()
メソッドを使っているなら、debug=True
を渡してデバッグモードを有効にしてください。
開発モードに関わらず、トレースバックもサーバーを実行しているターミナルに出力されます。
PyCharmやVS Codeなどを使用している場合は、デバッガを利用してブレークポイントを設定しながらコードを読み進めることができます。実行設定では、app.run(debug=True, use_reloader=False)
を呼び出すスクリプトを指定するか、venv/bin/flask
スクリプトを指定して、コマンドラインと同じように使用することができます。リローダを無効にしたままにしておくこともできますが、リロードするとデバッグコンテキストが失われるので、再度ブレークポイントをキャッチする必要があります。
デバッグを開始したいビューで set_trace
を呼び出して、pdb や pudb などのターミナルデバッガを使用することもできます。
広すぎるexceptブロックを使わないようにしてください。すべてのコードをキャッチオールの try... except...
で囲んでしまうと、デバッグしたいエラーを黙らせてしまいます。Flaskはすでにデバッガや500エラーを表示したり、コンソールにトレースバックを出力することで例外を処理しているので、一般的には不要です。