PyneIDE में डिबगिंग
ब्रेकपॉइंट पर प्रोग्राम रोकें और हर कैंडल के वेरिएबल जाँचें।
कोड नियम के अनुसार हो सकता है, फिर भी मनचाहा नतीजा न दे। डिबगर से रन रोककर वेरिएबल देख सकते हैं और निर्देश एक-एक करके चला सकते हैं।
यहाँ क्लोज़ और पाँच-कैंडल औसत की दूरी जाँचेंगे। पहले अनुमान, फिर प्रोग्राम का नतीजा देखेंगे।
तीन तरह की त्रुटियाँ
सिंटैक्स त्रुटि लिखने के नियम तोड़ती है: कोलन छूटना या गलत इंडेंट। एडिटर अक्सर लिखते समय बता देता है।
रनटाइम त्रुटि चलते समय होती है। जैसे ऐरे में बिना तत्व वाले इंडेक्स को पढ़ना। तब त्रुटि संदेश के साथ रन रुक सकती है।
लॉजिकल त्रुटि पर भी प्रोग्राम चल सकता है। close - average की जगह average - close हो, तो चिह्न उलटता है। भाषा मना नहीं करती; नतीजा उद्देश्य से मिलाना है।
Visual Studio Code के View → Problems में एडिटर की बताई समस्याएँ हैं। लाइन पर क्लिक करके जगह पर जाएँ। कई लाइनें बदलने से पहले पूरा संदेश पढ़ें।
जाँचने के लिए प्रोग्राम
debug_average.py बनाएँ:
"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import bar_index, close, color, log, plot, script, ta
@script.indicator("Average Distance", overlay=False)
def main():
average: Series[float] = ta.sma(close, 5)
gap = close - average
if bar_index == 10:
log.info("close={0}, average={1}, gap={2}", close, average, gap)
plot(gap, "Distance", color=color.blue)bar_index वर्तमान कैंडल की संख्या है, शून्य से। 10 का इंडेक्स ग्यारहवीं कैंडल है। इसलिए इस ऐतिहासिक रन में लॉग एक बार लिखता है।
log.info फ़ॉर्मैट वाला संदेश बनाता है। {0}, {1} और {2} की जगह बाद की तीन वैल्यू इसी क्रम में आती हैं। नंबर वाली जगहों का टेक्स्ट लॉगर समझता है।
एक बार Run Pyne code से चलाएँ। क्लोज़ औसत से ऊपर हो तो लाइन धनात्मक हो। पहली चार कैंडल में औसत और दूरी गायब हैं।
किसी लाइन से पहले रुकना
plot(gap, ...)के नंबर के बाएँ क्लिक करें। ब्रेकपॉइंट का निशान आएगा।- कोड के ऊपर Debug दबाएँ।
- डेटा पूछा जाए तो
demoचुनें। - प्रोग्राम ब्रेकपॉइंट पर रुकता है। Run and Debug खोलें।
ब्रेकपॉइंट वह जगह है जहाँ डिबगर रोकता है। चुनी लाइन अभी नहीं चली। पहले के असाइनमेंट का नतीजा देख सकते हैं।
पहला ठहराव पहली कैंडल पर हो सकता है। वहाँ gap गायब है क्योंकि पूरी पाँच-कैंडल विंडो नहीं। डिबगर यही दिखा रहा है; गायब होना अकेले त्रुटि नहीं।
वार्म-अप के बाद की कैंडल पर जाएँ
डिबगिंग के तैरते टूलबार में Next Bar अगली कैंडल पर जाता है। आइकन पर माउस से नाम देखें। Run to Bar… खोजकर दबाएँ, 10 लिखें और Enter दें।
ग्यारहवीं पर पूरी पाँच वाली विंडो है। Variables में average और gap खोजें। Pyne समूह में कैंडल डेटा, जैसे bar_index और close, देखें।

average, Series है, इसलिए कोड में average[1] से पिछली वैल्यू लें। पिछला औसत वर्तमान जैसा होना ज़रूरी नहीं; विंडो एक कैंडल आगे गई है।
Watch एक्सप्रेशन
Watch में वे एक्सप्रेशन जोड़ें जो हर ठहराव पर चाहिए। आज़माएँ:
close
close[1]
average
close - averageclose[1] रुकी कैंडल से पिछली क्लोज़ है। average अपना वेरिएबल। close - average का नतीजा निकले gap से मिले।
वेरिएबल और सरल गणना देखें। Watch में ta.sma, ऑर्डर देने या ऐरे बदलने वाली कॉल न डालें। निरीक्षण प्रोग्राम का स्टेट न बदले।
लाइन-दर-लाइन और कैंडल-दर-कैंडल
Step Over बुलाए फ़ंक्शन के भीतर गए बिना अगले निर्देश पर जाता है। Step Into अपने फ़ंक्शन में जा सकता है। Continue अगले ठहराव तक चलता है; Disconnect डिबगिंग का कनेक्शन और सत्र समाप्त करता है।
Next Bar का पैमाना अलग है: अगली कैंडल। लाइन वाला कदम एक कैंडल का हिसाब दिखाता है; कैंडल वाला समय के साथ बदलाव।
रुकी कैंडल पूरी प्रोसेस नहीं हुई, इसलिए ग्राफ़ पिछला पूरा स्टेट दिखा सकता है। वर्तमान इंडेक्स और डेटा Pyne में देखें।
वेरिएबल पढ़ने से पहले चुनी लाइन देखें। असाइनमेंट अभी आगे हो, तो अपेक्षित वर्तमान नतीजा नहीं आया है।
चिह्न की त्रुटि पकड़ना
डिबगर रोकें। लाइन बदलें:
gap = average - closeफिर डिबगिंग शुरू करके उसी कैंडल पर जाएँ। कीमत औसत से ऊपर हो तो gap ऋणात्मक है, जबकि काम में धनात्मक दूरी चाहिए थी।
Watch का close - average मूल सही दिशा दिखाता है। दोनों मिलाने से तुरंत अंतर दिखता है। सही घटाव वापस करें और वही कैंडल फिर जाँचें।
स्वयं करके देखें
previous_close = close[1] जोड़कर डिबगर में देखें। इंडेक्स 10 पर किस कैंडल की क्लोज़ होनी चाहिए? पहली पर क्या वैल्यू है?
अभ्यास का हल
previous_close = close[1]कैंडल 10 पर कैंडल 9 की क्लोज़ है। पहली, इंडेक्स 0 पर गायब है क्योंकि फ़ाइल में पुरानी कैंडल नहीं।
लाइन ब्रेकपॉइंट से पहले लिखें ताकि रुकने तक चल चुकी हो। जाँच के बाद सहायक वेरिएबल और केवल जाँच वाला लॉग हटा सकते हैं।
अच्छी त्रुटि रिपोर्ट
मदद माँगें तो फ़ाइल, डेटा, असली इनपुट और कैंडल का समय दें। अपेक्षित और मिला नतीजा लिखें। “लाइन गलत है” के बजाय “इस कैंडल पर क्लोज़ 101 और औसत 100 है, लेकिन दूरी −1 आई” लिखें। इससे गणना जाँची जा सकती है।