Flaskでエラーをデバッグする方法を教えてください。コンソールに印刷しますか?ページへのFlashメッセージ?または、何かがうまくいかないときに何が起こっているかを把握するための、より強力なオプションがありますか?
開発モードでアプリを実行すると、エラーが発生したときにブラウザーにインタラクティブなトレースバックとコンソールが表示されます。開発モードで実行するには、FLASK_ENV=development
環境変数を設定してから、flask run
コマンドを使用します(アプリケーションにもFLASK_APP
を指定することを忘れないでください)。
Linux、Mac、Windows用Linuxサブシステム、Windows上のGit Bashなど:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Windows CMDの場合、エクスポートの代わりに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、または別のターミナルデバッガーを使用することもできます。
ブロックを除き、あまりにも広範に使用しないでください。キャッチオールtry... except...
ですべてのコードを囲むと、デバッグするエラーが沈黙します。 Flaskはデバッガーまたは500エラーを表示し、トレースバックをコンソールに出力することで既に例外を処理するため、通常は不要です。
以下に示すように、 Werkzeug Debuggereditにapp.run(debug=True)
を使用できます。
0.11
documentation から、環境変数をエクスポートすることでデバッグモードを有効にできます。
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --Host=0.0.0.0
Visual Studio Codeを使用している場合は、置き換えます
app.run(debug=True)
と
app.run()
内部デバッガーをオンにすると、VS Codeデバッガーが無効になります。
Flask Debug Toolbar 拡張機能を使用して、レンダリングされたページに埋め込まれたより詳細な情報を取得することもできます。
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>"
次のようにアプリケーションを起動します。
FLASK_APP=main.py FLASK_DEBUG=1 flask run
Flakアプリをデバッグする場合は、flaskアプリがあるフォルダーに移動し、仮想環境をアクティブにし、コンソールの行を貼り付けて「mainfilename」をflaskメインファイルに変更することを忘れないでください。
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --Host=0.0.0.0
flaskアプリのデバッガーを有効にすると、ほとんどすべてのエラーがコンソールまたはブラウザーウィンドウに出力されます。何がハッピングしているかを知りたい場合は、単純なprintステートメントを使用するか、javascriptコードにconsole.log()を使用することもできます。
クイックヒント-PyCharmを使用する場合は、Edit Configurations
=> Configurations
に移動し、FLASK_DEBUG
チェックボックスを有効にして、Run
を再起動します。
ローカルで実行していて、コードをステップ実行できるようにする場合:
python -m pdb script.py
仮想環境にpython-dotenv
をインストールします。
プロジェクトルートに.flaskenvを作成します。プロジェクトルートとは、app.pyファイルがあるフォルダーのことです。
このファイル内に以下を書きます:
FLASK_APP=myapp
FLASK_ENV=development
次のコマンドを発行します。
flask run
開発環境でロガーと出力ステートメントを使用すると、実稼働環境の場合に歩sentを使用できます。