कैसे एक फ्लास्क एप्लिकेशन डिबग करने के लिए


134

फ्लास्क में त्रुटियों को कैसे मिटाना है? कंसोल पर प्रिंट करें? पृष्ठ पर फ़्लैश संदेश? या क्या कुछ और गलत होने पर यह पता लगाने के लिए अधिक शक्तिशाली विकल्प उपलब्ध है कि क्या हो रहा है?


5
app.run()(या तो पर या बंद के साथ डिबग के बारे में) कुछ भी जादुई नहीं है । फ्लास्क किसी भी अन्य अजगर आवेदन की तरह व्यवहार करता है, इसलिए आप इसे उसी तरह से डीबग कर सकते हैं जिस तरह से आप किसी भी पायथन एप्लिकेशन को डीबग करते हैं। यदि आप लॉगिंग का उपयोग करना चाहते हैं, तो लॉगिंग का उपयोग करें। यदि आप प्रिंट करना चाहते हैं, तो प्रिंट का उपयोग करें। यदि आप चाहें तो आप डिबगर का उपयोग भी कर सकते हैं।
मार्क हिल्ड्रेथ

जवाबों:


128

डेवलपमेंट मोड में ऐप चलाने पर ब्राउजर में इंटरएक्टिव ट्रेसबैक और कंसोल दिखाई देगा जब कोई त्रुटि होगी। विकास मोड में चलाने के लिए, FLASK_ENV=developmentपर्यावरण चर सेट करें फिर flask runकमांड का उपयोग करें ( FLASK_APPअपने ऐप को इंगित करने के लिए याद रखें )।

लिनक्स के लिए, मैक, विंडोज के लिए लिनक्स सबसिस्टम, विंडोज पर गिट बैश आदि।:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Windows CMD के लिए, setनिर्यात के बजाय उपयोग करें :

set FLASK_ENV=development

PowerShell के लिए, उपयोग करें $env:

$env:FLASK_ENV = "development"

फ्लास्क 1.0 से पहले, यह FLASK_DEBUG=1इसके बजाय पर्यावरण चर द्वारा नियंत्रित किया गया था ।

यदि आप कमांड के app.run()बजाय विधि का उपयोग कर रहे हैं flask run, तो debug=Trueडिबग मोड को सक्षम करने के लिए पास करें।

ट्रेसबैक भी विकास मोड की परवाह किए बिना सर्वर चलाने वाले टर्मिनल पर मुद्रित होते हैं।

यदि आप PyCharm, VS कोड आदि का उपयोग कर रहे हैं, तो आप ब्रेकपॉइंट के साथ कोड के माध्यम से कदम रखने के लिए इसके डिबगर का लाभ उठा सकते हैं। रन कॉन्फ़िगरेशन एक स्क्रिप्ट कॉलिंग को इंगित कर सकता है app.run(debug=True, use_reloader=False), या इसे venv/bin/flaskस्क्रिप्ट पर इंगित कर सकता है और इसका उपयोग कमांड लाइन से कर सकता है। आप पुनः लोडर को अक्षम कर सकते हैं, लेकिन एक पुनः लोड डिबगिंग संदर्भ को मार देगा और आपको फिर से एक ब्रेकपॉइंट पकड़ना होगा।

set_traceजहाँ आप डीबग करना प्रारंभ करना चाहते हैं, वहां कॉल करके आप pdb, pudb, या किसी अन्य टर्मिनल डीबगर का उपयोग कर सकते हैं ।


सुनिश्चित करें कि ब्लॉकों को छोड़कर बहुत व्यापक उपयोग न करें। अपने सभी कोड को एक कैच के साथ चारों ओर try... except...से घेरने से उस त्रुटि को शांत किया जाएगा जिसे आप डिबग करना चाहते हैं। यह सामान्य रूप से अनावश्यक है, क्योंकि फ्लास्क पहले से ही डिबगर या 500 त्रुटि दिखा कर और कंसोल पर ट्रेसबैक प्रिंट करके अपवादों को संभाल लेगा।


38

आप नीचे दिए गए app.run(debug=True)अनुसार Werkzeug Debugger एडिट के लिए उपयोग कर सकते हैं , और मुझे पता होना चाहिए।


7
वास्तव में, जब आप अपने साथ दौड़ते हैं, तो debug=Trueवास्तव में वेर्केजग डिबगर का उपयोग कर रहे हैं, इसलिए यह या तो; या ;-) नहीं है
सीन विएरा

हा, तुम सही हो। मुझे लगता है मुझे आवश्यकताओं के लिए फ्लास्क के सेटअप-थ्रू पर देखना चाहिए था। मैं GAE के तहत काम करने के लिए इसकी एक संशोधित प्रति का उपयोग करता हूं जहां आपको Werkzeug को मैन्युअल रूप से प्रारंभ करना है।
bnlucas

मैंने app.run (डिबग = ट्रू) सेट किया है, अगर मैं xyz प्रिंट करता हूं, तो यह कहां प्रिंट होता है, धन्यवाद
Kimmy

उपयोग करके print 'xyz'कंसोल पर प्रिंट होगा। यदि आप ब्राउज़र में डीबग करना चाहते हैं, तो आपको उस त्रुटि पर मजबूर करने की आवश्यकता होगी जहां आप डीबग करना चाहते हैं। raise Exception('xyz')। यह ब्राउज़र विंडो में आउटपुट के लिए डिबग को ट्रिगर करेगा।
bnlucas

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 पर काम कर रहा हूं, यह वास्तव में मेरी बहुत मदद नहीं करता है।
माइकल शेपर

मैं उस स्निपेट को कहां रखूं?
mLstudent33

1
@ mLstudent33 एक खोल में
लोपेज

15

प्रदान किए गए पृष्ठों में एम्बेडेड अधिक विस्तृत जानकारी प्राप्त करने के लिए फ्लास्क डिबग टूलबार एक्सटेंशन का भी उपयोग किया जा सकता है ।

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

यदि आप विज़ुअल स्टूडियो कोड का उपयोग कर रहे हैं, तो प्रतिस्थापित करें

app.run(debug=True)

साथ में

app.run()

यह तब दिखाई देता है जब आंतरिक डीबगर को चालू करना वीएस कोड डीबगर को अक्षम करता है।


3
क्या आप एक काम कर रहे सेटअप का एक उदाहरण साझा कर सकते हैं? मेरे पास पहले से ही FLASK_APP परिभाषित है और डिफ़ॉल्ट विन्यास काम नहीं करेगा। मैंने यह एक कोशिश की - pastebin.com/v8hBQ2vv और इसी तरह के कई क्रमपरिवर्तन, लेकिन कोई फायदा नहीं हुआ।
ब्रैंडन

12

अगर आप अपने फ्लास्क ऐप को डीबग करना चाहते हैं तो बस उस फ़ोल्डर में जाएं जहां फ्लास्क ऐप है। अपने आभासी वातावरण को सक्रिय करने और मुख्य फ़ाइल को फ्लास्क करने के लिए कंसोल परिवर्तन "मेनफिलनेम" में लाइनों को चिपकाना न भूलें।

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

फ्लास्क ऐप के लिए अपने डिबगर को सक्षम करने के बाद लगभग हर त्रुटि कंसोल या ब्राउज़र विंडो पर मुद्रित की जाएगी। यदि आप यह पता लगाना चाहते हैं कि क्या हो रहा है, तो आप सरल प्रिंट स्टेटमेंट का उपयोग कर सकते हैं या आप जावास्क्रिप्ट कोड के लिए कंसोल.लॉग () का भी उपयोग कर सकते हैं।


5

python-dotenvअपने आभासी वातावरण में स्थापित करें ।

अपने प्रोजेक्ट रूट में .flaskenv बनाएं। प्रोजेक्ट रूट के द्वारा, मेरा मतलब है कि जिस फ़ोल्डर में आपका app.py फ़ाइल है

इस फ़ाइल के अंदर निम्नलिखित लिखें:

FLASK_APP=myapp 
FLASK_ENV=development

अब निम्नलिखित आदेश जारी करें:

flask run

मेरे लिए काम नहीं कर रहा है ... यह डिबग मोड दिखाता है: ऑफ
फेडरिको जेंटाइल

3

फ्लास्क में डिबग मोड को सक्रिय करने के लिए आप बस विंडोज़ के लिए सेट FLASK_DEBUG=1पर टाइप करें CMDऔर FLASK_DEBUG=1लिनक्स टर्मिनल पर निर्यात करें और फिर अपने ऐप को पुनरारंभ करें और आप जाने के लिए अच्छे हैं !!


2

त्वरित टिप - यदि आप PyCharm का उपयोग करते हैं, तो Edit Configurations=> पर जाएं Configurationsऔर FLASK_DEBUGचेकबॉक्स को सक्षम करें , को पुनरारंभ करें Run


2
आप जोड़ना चाह सकते हैं कि यह चेकबॉक्स केवल PyCharm प्रोफेशनल में उपलब्ध है। संदर्भ: जेटब्राइन्स.com
help

1

विकास पर्यावरण में लॉगर्स और प्रिंट स्टेटमेंट का उपयोग करें, आप उत्पादन वातावरण के मामले में संतरी के लिए जा सकते हैं।


1

विंडोज उपयोगकर्ताओं के लिए:

अपनी परियोजना निर्देशिका में पॉवर्सशेल और सीडी खोलें।

Powershell में इन कमांडो का उपयोग करें, अन्य सभी सामान Powershell में काम नहीं करेंगे।

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

-1

यदि आप इसे स्थानीय स्तर पर चला रहे हैं और कोड के माध्यम से कदम रखना चाहते हैं:

python -m pdb script.py


यह सब पर क्षुधा फ्लास्क पर लागू नहीं होता
CornSmith
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.