Bagaimana maksud Anda men-debug kesalahan dalam Flask? Cetak ke konsol? Pesan kilat ke halaman? Atau apakah ada opsi yang lebih kuat yang tersedia untuk mencari tahu apa yang terjadi ketika terjadi kesalahan?
Tidak ada yang ajaib tentang app.run()(baik dengan men-debug on atau off). Flask berperilaku seperti aplikasi python lainnya, sehingga Anda dapat men-debugnya dengan cara yang sama Anda men-debug aplikasi Python. Jika Anda ingin menggunakan pencatatan, gunakan pencatatan. Jika Anda ingin mencetak, gunakan cetakan. Anda bahkan dapat menggunakan debugger jika Anda mau.
Mark Hildreth
Jawaban:
128
Menjalankan aplikasi dalam mode pengembangan akan menunjukkan traceback dan konsol interaktif di browser ketika ada kesalahan. Untuk menjalankan dalam mode pengembangan, atur FLASK_ENV=developmentvariabel lingkungan lalu gunakan flask runperintah (ingat juga untuk menunjuk FLASK_APPke aplikasi Anda).
Untuk Linux, Mac, Subsistem Linux untuk Windows, Git Bash pada Windows, dll .:
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Untuk Windows CMD, gunakan setalih-alih ekspor:
set FLASK_ENV=development
Untuk PowerShell, gunakan $env:
$env:FLASK_ENV ="development"
Sebelum ke Flask 1.0, ini dikendalikan oleh FLASK_DEBUG=1variabel lingkungan sebagai gantinya.
Jika Anda menggunakan app.run()metode alih-alih flask runperintah, operasikan debug=Trueuntuk mengaktifkan mode debug.
Tracebacks juga dicetak ke terminal yang menjalankan server, terlepas dari mode pengembangan.
Jika Anda menggunakan PyCharm, VS Code, dll., Anda dapat memanfaatkan debugger-nya untuk menelusuri kode dengan breakpoints. Konfigurasi run dapat menunjuk ke pemanggilan skrip app.run(debug=True, use_reloader=False), atau mengarahkannya ke venv/bin/flaskskrip dan menggunakannya seperti yang Anda lakukan dari baris perintah. Anda dapat membiarkan reloader dinonaktifkan, tetapi reload akan mematikan konteks debugging dan Anda harus menangkap breakpoint lagi.
Anda juga dapat menggunakan pdb, pudb, atau terminal debugger lainnya dengan memanggil set_tracetampilan tempat Anda ingin memulai debugging.
Pastikan untuk tidak menggunakan terlalu luas kecuali blok. Mengitari semua kode Anda dengan catch-all try... except...akan membungkam kesalahan yang ingin Anda debug. Ini tidak perlu secara umum, karena Flask sudah akan menangani pengecualian dengan menunjukkan kesalahan debugger atau 500 dan mencetak traceback ke konsol.
Sebenarnya, ketika Anda menjalankan dengan debug=TrueAnda sebenarnya menggunakan debuger Werkzeug sehingga itu bukan-atau ;-)
Sean Vieira
Ha, kamu benar. Saya kira saya harus melihat setup.py Flask untuk persyaratan. Saya menggunakan salinan yang dimodifikasi untuk bekerja di bawah GAE di mana Anda harus menginisialisasi Werkzeug secara manual.
bnlucas
Saya telah mengatur app.run (debug = True), jika saya mencetak xyz ke mana ia mencetak, terima kasih
Kimmy
Menggunakan print 'xyz'akan mencetak ke konsol. Jika Anda ingin men-debug di browser, Anda harus memaksakan kesalahan di mana Anda ingin melakukan debug. raise Exception('xyz'). Ini akan memicu debug ke output di jendela browser.
bnlucas
25
Dari 1.1.xdokumentasi , Anda dapat mengaktifkan mode debug dengan mengekspor variabel lingkungan ke prompt shell Anda:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Jawaban ini akan lebih membantu jika menjelaskan apa sebenarnya mode debug. Apakah itu lebih dari sekadar mengizinkan debugging di browser? Sayangnya, karena saya sedang mengerjakan REST API, itu tidak banyak membantu saya.
Michael Scheper
Di mana saya meletakkan potongan itu?
mLstudent33
1
@ mLstudent33 dalam shell
Édouard Lopez
16
Anda juga dapat menggunakan ekstensi Flask Debug Toolbar untuk mendapatkan informasi yang lebih terperinci tertanam di halaman yang diberikan.
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>"
Bisakah Anda membagikan contoh pengaturan yang berfungsi? Saya sudah mendefinisikan FLASK_APP di env saya dan konfigurasi default tidak akan berfungsi. Saya mencoba yang satu ini - pastebin.com/v8hBQ2vv dan sejumlah permutasi yang serupa, tetapi tidak berhasil.
Brandon Dube
12
Jika Anda ingin men-debug aplikasi labu Anda maka pergi saja ke folder tempat aplikasi labu itu. Jangan lupa untuk mengaktifkan lingkungan virtual Anda dan menempelkan garis-garis di konsol ganti "mainfilename" menjadi flask file utama.
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Setelah Anda mengaktifkan debugger untuk aplikasi labu, hampir setiap kesalahan akan dicetak di konsol atau di jendela browser. Jika Anda ingin mengetahui apa yang terjadi, Anda dapat menggunakan pernyataan cetak sederhana atau Anda juga dapat menggunakan console.log () untuk kode javascript.
Tidak berfungsi untuk saya ... tetap menampilkan mode Debug: off
Federico Gentile
3
Untuk mengaktifkan mode debug di dalam flask, Anda cukup mengetik FLASK_DEBUG=1di CMDwindows Anda dan mengekspor FLASK_DEBUG=1di Linux termial kemudian restart aplikasi Anda dan Anda siap pergi !!
app.run()
(baik dengan men-debug on atau off). Flask berperilaku seperti aplikasi python lainnya, sehingga Anda dapat men-debugnya dengan cara yang sama Anda men-debug aplikasi Python. Jika Anda ingin menggunakan pencatatan, gunakan pencatatan. Jika Anda ingin mencetak, gunakan cetakan. Anda bahkan dapat menggunakan debugger jika Anda mau.Jawaban:
Menjalankan aplikasi dalam mode pengembangan akan menunjukkan traceback dan konsol interaktif di browser ketika ada kesalahan. Untuk menjalankan dalam mode pengembangan, atur
FLASK_ENV=development
variabel lingkungan lalu gunakanflask run
perintah (ingat juga untuk menunjukFLASK_APP
ke aplikasi Anda).Untuk Linux, Mac, Subsistem Linux untuk Windows, Git Bash pada Windows, dll .:
Untuk Windows CMD, gunakan
set
alih-alih ekspor:Untuk PowerShell, gunakan
$env
:Sebelum ke Flask 1.0, ini dikendalikan oleh
FLASK_DEBUG=1
variabel lingkungan sebagai gantinya.Jika Anda menggunakan
app.run()
metode alih-alihflask run
perintah, operasikandebug=True
untuk mengaktifkan mode debug.Tracebacks juga dicetak ke terminal yang menjalankan server, terlepas dari mode pengembangan.
Jika Anda menggunakan PyCharm, VS Code, dll., Anda dapat memanfaatkan debugger-nya untuk menelusuri kode dengan breakpoints. Konfigurasi run dapat menunjuk ke pemanggilan skrip
app.run(debug=True, use_reloader=False)
, atau mengarahkannya kevenv/bin/flask
skrip dan menggunakannya seperti yang Anda lakukan dari baris perintah. Anda dapat membiarkan reloader dinonaktifkan, tetapi reload akan mematikan konteks debugging dan Anda harus menangkap breakpoint lagi.Anda juga dapat menggunakan pdb, pudb, atau terminal debugger lainnya dengan memanggil
set_trace
tampilan tempat Anda ingin memulai debugging.Pastikan untuk tidak menggunakan terlalu luas kecuali blok. Mengitari semua kode Anda dengan catch-all
try... except...
akan membungkam kesalahan yang ingin Anda debug. Ini tidak perlu secara umum, karena Flask sudah akan menangani pengecualian dengan menunjukkan kesalahan debugger atau 500 dan mencetak traceback ke konsol.sumber
Anda dapat menggunakan
app.run(debug=True)
untuk mengedit Werkzeug Debugger seperti yang disebutkan di bawah ini, dan saya seharusnya tahu.sumber
debug=True
Anda sebenarnya menggunakan debuger Werkzeug sehingga itu bukan-atau ;-)print 'xyz'
akan mencetak ke konsol. Jika Anda ingin men-debug di browser, Anda harus memaksakan kesalahan di mana Anda ingin melakukan debug.raise Exception('xyz')
. Ini akan memicu debug ke output di jendela browser.Dari
1.1.x
dokumentasi , Anda dapat mengaktifkan mode debug dengan mengekspor variabel lingkungan ke prompt shell Anda:sumber
Anda juga dapat menggunakan ekstensi Flask Debug Toolbar untuk mendapatkan informasi yang lebih terperinci tertanam di halaman yang diberikan.
Mulai aplikasi sebagai berikut:
sumber
Jika Anda menggunakan Visual Studio Code, ganti
dengan
Itu muncul ketika menyalakan debugger internal menonaktifkan debugger Kode VS.
sumber
Jika Anda ingin men-debug aplikasi labu Anda maka pergi saja ke folder tempat aplikasi labu itu. Jangan lupa untuk mengaktifkan lingkungan virtual Anda dan menempelkan garis-garis di konsol ganti "mainfilename" menjadi flask file utama.
Setelah Anda mengaktifkan debugger untuk aplikasi labu, hampir setiap kesalahan akan dicetak di konsol atau di jendela browser. Jika Anda ingin mengetahui apa yang terjadi, Anda dapat menggunakan pernyataan cetak sederhana atau Anda juga dapat menggunakan console.log () untuk kode javascript.
sumber
Instal
python-dotenv
di lingkungan virtual Anda.Buat .flaskenv di root proyek Anda. Dengan root proyek, maksud saya folder yang memiliki file app.py Anda
Di dalam file ini tulis yang berikut ini:
Sekarang jalankan perintah berikut:
sumber
Untuk mengaktifkan mode debug di dalam flask, Anda cukup mengetik
FLASK_DEBUG=1
diCMD
windows Anda dan mengeksporFLASK_DEBUG=1
di Linux termial kemudian restart aplikasi Anda dan Anda siap pergi !!sumber
Kiat cepat - jika Anda menggunakan PyCharm, buka
Edit Configurations
=>Configurations
dan aktifkanFLASK_DEBUG
kotak centang, mulai ulangRun
.sumber
Gunakan penebang dan pernyataan cetak di Lingkungan Pengembangan, Anda dapat pergi untuk penjaga jika lingkungan produksi.
sumber
Untuk pengguna Windows:
Buka Powershell dan cd ke direktori proyek Anda.
Gunakan komando ini di Powershell, semua hal lain tidak akan berfungsi di Powershell.
sumber
Jika Anda menjalankannya secara lokal dan ingin dapat menelusuri kode:
python -m pdb script.py
sumber