2012-09-28 46 views
29

में फ़ंक्शन में कदम उठाना क्या आईपीथॉन में किसी फ़ंक्शन की पहली पंक्ति में कदम उठाने का कोई तरीका है। मैं कुछ है कि कैसा दिखेगा कल्पना:आईपीथॉन

%step foo(1, 2) 

जो ipdb चलाता है और foo की पहली पंक्ति में एक ब्रेकपाइंट सेट।

अगर मैं इसे अभी करना चाहता हूं तो मुझे फ़ंक्शन के स्रोत कोड पर जाना होगा और import ipdb; ipdb.set_trace() लाइन जोड़नी होगी।

+1

'% step' जैसे कोई फ़ंक्शन नहीं है। आप एक संपूर्ण स्क्रिप्ट '% run -d' कर सकते हैं, लेकिन आप एक ही कथन या फ़ंक्शन कॉल के लिए एक ही चीज़ नहीं कर सकते हैं। आप मैन्युअल रूप से 'pdb.run ("foo (1, 2)") 'या' pdb.runcall (foo, 1, 2) 'कर सकते हैं। – abarnert

+0

मैं आज भी वही बात सोच रहा था। अगर यह उपलब्ध था तो मैं हर समय इसका इस्तेमाल करूंगा। IPython स्रोत में खोदने का समय यह देखने के लिए कि इसे कैसे कार्यान्वित किया जा सकता है। –

+0

संभावित डुप्लिकेट [क्या यह डिबगिंग के साथ आईपीथॉन में कमांड चलाने के लिए संभव है?] (Https://stackoverflow.com/questions/9689378/is-it-possible-to-run-commands-in-ipython-with-debugging) –

उत्तर

42

आईपीडीबी ने इस वर्ष की शुरुआत में रनकॉल, रनवेवल और 0.7 के बाद से समर्थन किया है। आप इसे pdb.runcall की तरह उपयोग कर सकते हैं:

In [1]: def foo(a, b): 
    ...:  print a + b 
    ...: 

In [2]: import ipdb 

In [3]: ipdb.runcall(foo, 1, 2) 
> <ipython-input-1-2e565fd9c4a4>(2)foo() 
     1 def foo(a, b): 
----> 2  print a + b 
     3 

ipdb> 
+0

यह मुझे बहुत कुछ चाहिए जो मुझे चाहिए। 0.7 अपडेट को इंगित करने के लिए धन्यवाद, मेरे पास पुराना संस्करण था। ऐसा होने पर एक ipython जादू जोड़ने के लिए संभवतः रनकॉल का उपयोग करना आसान है। –

+8

असल में यह पता चला है कि आपको बाहरी आईपीडीबी की आवश्यकता नहीं है, आप केवल आईपीथॉन.कोर.डेबगर आयात पीडीबी से कर सकते हैं; ipdb = PDB() '। –

+1

सबसे सुरुचिपूर्ण विधि नहीं है। मुझे इस तरह की एक आम आवश्यकता के लिए एक जादू समारोह की उम्मीद थी। मुझे आश्चर्य है कि क्या यह 'SciPy' उपयोगकर्ताओं के लिए एक सामान्य आवश्यकता नहीं है ... –