2010-11-15 10 views
7

पर% pdb मैं ipython के लिए नया हूं और मैं अपने कोड को डीबग करने के लिए ipython का उपयोग करने की कोशिश कर रहा हूं। मैंने किया था:ipython के साथ डीबगिंग सत्र में चर का उपयोग और

[1]: %pdb 
Automatic pdb calling has been turned ON 

और फिर

In [2]: %run mycode.py 

और कोड में, मैं 1/0 तो यह एक अपवाद को जन्म देती है और स्वचालित रूप से डिबग सत्र में चला जाता है होगा।

ZeroDivisionError: float division 

ipdb> variable 
array([ 0.00704313, -1.34700666, -2.81474391]) 

तो मैं चर का उपयोग कर सकता हूं। लेकिन जब मैं निम्न कार्य करें:

ipdb> b = variable 
*** The specified object '= variable' is not a function or was not found along sys.path. 

लेकिन यह काम करता है:

ipdb> b = self.X 

उत्तर

9

b ब्रेक अंक निर्धारित करने के लिए प्रयोग किया जाता है। तो जो कुछ भी b का पालन करता है वह एक कार्य या रेखा संख्या होने की उम्मीद है।

यदि आप ipdb> help टाइप करते हैं तो आप आदेशों (आरक्षित शब्दों) की पूरी सूची देखेंगे।

आप इस्तेमाल कर सकते हैं, एक चर के रूप में कहते हैं, x या y:

ipdb> y = variable 

या

ipdb> exec 'b = variable' 
+0

क्या इस बी कमांड को अधिभारित करने का कोई तरीका है? मेरे आवेदन परिवर्तनीय नाम बी में बहुत स्वाभाविक रूप से होता है, और यह दर्द का उपयोग करने में सक्षम नहीं है। – joon

+0

@ जून: एक-अक्षर परिवर्तनीय नाम होने पर आमतौर पर एक अच्छा प्रोग्रामिंग अभ्यास नहीं बोल रहा है। हो सकता है कि यह समस्या आपको परिवर्तनीय नाम बदलने के लिए प्रेरित करे। मुझे एहसास है कि करना मुश्किल हो सकता है। उस स्थिति में आप 'exec' b = variable'' आज़मा सकते हैं। बेशक – unutbu

+2

। यह सिर्फ चरित्र बी गणितीय समकक्ष के लिए प्राकृतिक पसंद है। धन्यवाद! – joon

0

आप उपयोग कर सकते

locals()["b"] = variable 
1

मैं आप का उपयोग करने की जरूरत है लगता है कि '! ' (pdb documentation): ! कथन वर्तमान स्टैक फ्रेम के संदर्भ में (एक-पंक्ति) कथन निष्पादित करें। विस्मयादिबोधक बिंदु छोड़ा जा सकता है जब तक कि कथन का पहला शब्द डीबगर कमांड जैसा दिखता हो। एक वैश्विक चर सेट करने के लिए, आप उसी पंक्ति पर वैश्विक विवरण के साथ असाइनमेंट कमांड को उपसर्ग कर सकते हैं, उदाहरण:

global list_options; list_options = ['-l'] 
संबंधित मुद्दे