Flask uygulamasında nasıl hata ayıklanır


134

Flask'taki hataları nasıl ayıklamak istersiniz? Konsola yazdırılsın mı? Sayfaya Flash mesajlar? Ya da bir şeyler ters gittiğinde neler olduğunu anlamak için daha güçlü bir seçenek var mı?


5
Büyülü bir şey yok app.run()(hata ayıklama açık veya kapalıyken). Flask, diğer herhangi bir python uygulaması gibi davranır, böylece herhangi bir Python uygulamasında yaptığınız gibi hata ayıklayabilirsiniz. Günlük kaydını kullanmak istiyorsanız, günlük kaydını kullanın. Baskı almak istiyorsanız baskı kullanın. İsterseniz bir hata ayıklayıcı bile kullanabilirsiniz.
Mark Hildreth

Yanıtlar:


128

Uygulamanın geliştirme modunda çalıştırılması, bir hata olduğunda tarayıcıda etkileşimli bir izleme ve konsol gösterecektir. Geliştirme modunda çalıştırmak için FLASK_ENV=developmentortam değişkenini ayarlayın ve ardından flask runkomutu kullanın ( FLASK_APPuygulamanızı da işaret etmeyi unutmayın).

Linux, Mac, Windows için Linux Alt Sistemi, Windows'ta Git Bash vb. İçin:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Windows CMD setiçin dışa aktarma yerine kullanın :

set FLASK_ENV=development

PowerShell için şunu kullanın $env:

$env:FLASK_ENV = "development"

Flask 1.0'dan önce bu, FLASK_DEBUG=1bunun yerine ortam değişkeni tarafından kontrol ediliyordu .

Komut app.run()yerine yöntemi kullanıyorsanız, hata ayıklama modunu etkinleştirmek için geçin.flask rundebug=True

İzleme boşlukları, geliştirme modundan bağımsız olarak sunucuyu çalıştıran terminale de yazdırılır.

PyCharm, VS Code, vb. Kullanıyorsanız, kodda kesme noktaları ile ilerlemek için hata ayıklayıcısından yararlanabilirsiniz. Çalıştırma yapılandırması, çağıran bir komut dosyasını işaret edebilir app.run(debug=True, use_reloader=False)veya venv/bin/flaskkomut satırına işaret edebilir ve komut satırından yaptığınız gibi onu kullanabilir. Yeniden yükleyiciyi devre dışı bırakabilirsiniz, ancak yeniden yükleme, hata ayıklama bağlamını ortadan kaldırır ve yeniden bir kesme noktası yakalamanız gerekir.

Ayrıca, set_tracehata ayıklamayı başlatmak istediğiniz görünümde arama yaparak pdb, pudb veya başka bir terminal hata ayıklayıcıyı da kullanabilirsiniz .


Bloklar dışında çok geniş kullanmadığınızdan emin olun. Tüm kodunuzu bir tümünü yakalama ile try... except...çevrelemek, hata ayıklamak istediğiniz hatayı susturur. Genel olarak gereksizdir, çünkü Flask hata ayıklayıcıyı veya bir 500 hatası göstererek ve izlemeyi konsola yazdırarak istisnaları halihazırda ele alacaktır.


38

Sen kullanabilirsiniz app.run(debug=True)için Werkzeug Debugger düzenlemek aşağıda belirtildiği gibi, ben bilmeliydim.


7
Aslında, birlikte koştuğunuzda debug=True, aslında Werkzeug hata ayıklayıcısını kullanıyorsunuz, yani bu bir ya da ;-) değil
Sean Vieira

Ha, haklısın. Sanırım gereksinimler için Flask'ın setup.py dosyasına bakmalıydım. Werkzeug'u manuel olarak başlatmanız gereken GAE altında çalışmak için bunun değiştirilmiş bir kopyasını kullanıyorum.
bnlucas

App.run ayarını yaptım (hata ayıklama = True), eğer xyz'i nereye yazdırırsam, teşekkürler
Kimmy

Kullanmak print 'xyz'konsola yazdıracaktır. Tarayıcıda hata ayıklamak istiyorsanız, hata ayıklamak istediğiniz yerde bir hata yapmaya zorlamanız gerekir. raise Exception('xyz'). Bu, hata ayıklamayı tarayıcı penceresinde çıktı olarak tetikleyecektir.
bnlucas

25

Gönderen 1.1.xbelgeler , kabuk komut bir ortam değişkeni ihraç ederek hata ayıklama modunu etkinleştirebilirsiniz:

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

4
Bu cevap, hata ayıklama modunun gerçekte ne olduğunu açıklarsa daha yararlı olacaktır. Tarayıcıda hata ayıklamaya izin vermekten fazlasını yapıyor mu? Ne yazık ki, bir REST API üzerinde çalıştığım için bu bana pek yardımcı olmuyor.
Michael Scheper

Bu pasajı nereye koyacağım?
mLstudent33

1
@ mLstudent33 kabukta
Édouard Lopez

16

Oluşturulan sayfalara gömülü daha ayrıntılı bilgi almak için Flask Debug Toolbar uzantısı da kullanılabilir .

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>"

Uygulamayı aşağıdaki şekilde başlatın:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

Visual Studio Code kullanıyorsanız, değiştirin

app.run(debug=True)

ile

app.run()

Dahili hata ayıklayıcıyı açtığınızda VS Code hata ayıklayıcısını devre dışı bırakır.


3
Çalışan bir kurulum örneğini paylaşır mısınız? Ortamımda FLASK_APP tanımlıyım ve varsayılan yapılandırma çalışmıyor. Bunu denedim - pastebin.com/v8hBQ2vv ve bir dizi benzer permütasyon, ancak boşuna.
Brandon Dube

12

Flask uygulamanızda hata ayıklamak istiyorsanız, sadece flask uygulamasının bulunduğu klasöre gidin. Sanal ortamınızı etkinleştirmeyi ve konsoldaki satırları "mainfilename" değişikliğini flask ana dosyasına yapıştırmayı unutmayın.

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

Hata ayıklayıcınızı flask uygulaması için etkinleştirdikten sonra, neredeyse her hata konsolda veya tarayıcı penceresinde yazdırılacaktır. Neler olduğunu anlamak istiyorsanız, basit yazdırma ifadelerini kullanabilir veya javascript kodu için console.log () da kullanabilirsiniz.


6

python-dotenvSanal ortamınıza kurun .

Proje kökünüzde bir .flaskenv oluşturun. Proje kökü derken, app.py dosyanızın bulunduğu klasörü kastediyorum

Bu dosyanın içine şunları yazın:

FLASK_APP=myapp 
FLASK_ENV=development

Şimdi aşağıdaki komutu verin:

flask run

Bana çalışmıyor ... Hata Ayıklama modunu göstermeye devam ediyor: kapalı
Federico Gentile

3

Flask'ta hata ayıklama modunu etkinleştirmek FLASK_DEBUG=1için CMD, Windows için FLASK_DEBUG=1setinizi yazmanız ve Linux'ta dışa aktarmanız ve ardından uygulamanızı yeniden başlatmanız yeterlidir!


2

Hızlı ipucu - PyCharm kullanıyorsanız, Edit Configurations=> seçeneğine gidin Configurationsve FLASK_DEBUGonay kutusunu etkinleştirin Run,.


2
Bu onay kutusunun yalnızca PyCharm Professional'da mevcut olduğunu eklemek isteyebilirsiniz. Referans: jetbrains.com/help/pycharm/…
cyroxx

1

Geliştirme Ortamında kaydedicileri ve baskı ifadelerini kullanın, üretim ortamları durumunda nöbetçiye gidebilirsiniz.


1

Windows kullanıcıları için:

Powershell'i açın ve proje dizininize cd yapın.

Powershell'de bu komandoları kullanın, diğer hiçbir şey Powershell'de çalışmayacaktır.

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

-1

Yerel olarak çalıştırıyorsanız ve kodda adım adım ilerleyebilmek istiyorsanız:

python -m pdb script.py


Bu, şişe uygulamaları için hiç geçerli değil
CornSmith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.