Flaskアプリをデバッグする方法


134

Flaskでエラーをデバッグする方法を教えてください。コンソールに印刷しますか?ページへのフラッシュメッセージ?または、何かがうまくいかないときに何が起こっているのかを理解するために利用できるより強力なオプションはありますか?


5
魔法のようなものは何もありませんapp.run()(デバッグがオンでもオフでも)。Flaskは他のPythonアプリケーションと同じように動作するため、Pythonアプリケーションをデバッグするのと同じ方法でデバッグできます。ロギングを使用する場合は、ロギングを使用します。印刷したい場合は、印刷を使用してください。必要に応じて、デバッガを使用することもできます。
Mark Hildreth、2013年

回答:


128

エラーが発生した場合、アプリを開発モードで実行すると、ブラウザーにインタラクティブなトレースバックとコンソールが表示されます。開発モードで実行するには、FLASK_ENV=development環境変数を設定しflask runてからコマンドを使用FLASK_APPします(アプリを指すことも忘れないでください)。

Linux、Mac、Linux Subsystem for Windows、Git Bash on Windowsなどの場合:

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代わりに環境変数によって制御されていました。

コマンドのapp.run()代わりにメソッドを使用している場合は、デバッグモードを有効にするためflask runに渡しdebug=Trueます。

トレースバックは、開発モードに関係なく、サーバーを実行しているターミナルにも出力されます。

PyCharmやVS Codeなどを使用している場合は、そのデバッガーを利用して、ブレークポイントでコードをステップ実行できます。実行構成は、スクリプト呼び出しをポイントするか、スクリプトをapp.run(debug=True, use_reloader=False)ポイントしてvenv/bin/flask、コマンドラインから行う場合と同じように使用できます。リローダーを無効のままにしておくことができますが、リロードはデバッグコンテキストを強制終了するため、ブレークポイントを再度キャッチする必要があります。

set_traceデバッグを開始するビューでを呼び出すことにより、pdb、pudb、または別のターミナルデバッガーを使用することもできます。


ブロック以外は広すぎないようにしてください。すべてのコードをキャッチオールで囲むと、try... except...デバッグするエラーが表示されなくなります。Flaskはすでにデバッガまたは500エラーを表示し、トレースバックをコンソールに出力することで例外を処理するため、これは一般に不要です。


38

あなたは使用することができるapp.run(debug=True)ためWERKZEUGデバッガの 編集後述するように、そして私が知られている必要があります。


7
実際、一緒に実行するdebug=True場合、実際にはWerkzeugデバッガーを使用しているため、どちらでもありません;-)
Sean Vieira

ハ、あなたは正しい。要件については、Flaskのsetup.pyを確認する必要があったと思います。Weakzeugを手動で初期化する必要があるGAEの下で作業するために、修正したコピーを使用します。
bnlucas 2013年

app.run(debug = True)を設定しました。xyzを印刷する場合、どこに印刷するのか、ありがとう
Kimmy

を使用print 'xyz'すると、コンソールに出力されます。ブラウザでデバッグする場合は、デバッグする場所でエラーを強制する必要があります。raise Exception('xyz')。これにより、デバッグがトリガーされ、ブラウザーウィンドウに出力されます。
bnlucas 2013年

25

1.1.xドキュメントから、環境変数をシェルプロンプトにエクスポートして、デバッグモードを有効にすることができます。

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

4
この回答は、実際にデバッグモードが何であるかを説明している場合に役立ちます。ブラウザでのデバッグを許可するだけではありませんか?残念ながら、私はREST APIに取り組んでいるため、実際にはあまり役に立ちません。
Michael Scheper

そのスニペットはどこに置くのですか?
mLstudent33

1
@ mLstudent33 in a shell
エドゥアールロペス

15

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

12

Visual Studio Codeを使用している場合は、

app.run(debug=True)

app.run()

内部デバッガーをオンにすると、VS Codeデバッガーが無効になります。


3
機能しているセットアップの例を教えてください。私の環境でFLASK_APPがすでに定義されていて、デフォルトの設定が機能しません。私はこれを試しました-pastebin.com/v8hBQ2vvと多くの同様の順列ですが、役に立ちませんでした。
Brandon Dube、2018年

12

フラスコアプリをデバッグする場合は、フラスコアプリがあるフォルダーに移動します。仮想環境をアクティブ化し、コンソールの行を貼り付けて、「mainfilename」をフラスコのメインファイルに変更することを忘れないでください。

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

フラスコアプリのデバッガーを有効にすると、ほぼすべてのエラーがコンソールまたはブラウザーウィンドウに出力されます。何が起こっているのかを把握したい場合は、単純な印刷ステートメントを使用するか、JavaScriptコードにconsole.log()を使用することもできます。


5

python-dotenv仮想環境にインストールします。

プロジェクトのルートに.flaskenvを作成します。プロジェクトルートとは、app.pyファイルを含むフォルダを意味します

このファイル内に次のように書き込みます。

FLASK_APP=myapp 
FLASK_ENV=development

次のコマンドを発行します。

flask run

機能していない...デバッグモードが表示され続ける:オフ
Federico Gentile

3

フラスコでデバッグモードをアクティブFLASK_DEBUG=1にするにはCMD、Windowsでsetと入力し、FLASK_DEBUG=1Linuxターミナルにエクスポートしてから、アプリを再起動してください。


2

ヒント-PyCharmを使用している場合は、Edit Configurations=> に移動してチェックボックスConfigurationsを有効にしFLASK_DEBUG、を再起動しRunます。


2
このチェックボックスはPyCharm Professionalでのみ利用可能であることを追加したいかもしれません。参考:jetbrains.com/help/pycharm/...
cyroxx

1

開発環境でロガーと印刷ステートメントを使用すると、本番環境の場合は監視センターに行くことができます。


1

Windowsユーザーの場合:

Powershellを開き、プロジェクトディレクトリにcdします。

Powershellでこれらのコマンドを使用します。他のすべてのものはPowershellでは機能しません。

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

ローカルで実行していて、コードをステップ実行できるようにしたい場合:

python -m pdb script.py


これはフラスコアプリにはまったく適用されません
CornSmith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.