2012-06-05 13 views
11

पीडीबी (और अन्य पायथन डीबगर्स) के पास किसी भी मौजूदा चर के मूल्य को देखने का एक आसान तरीका है, बस इसे टाइप करके। हालांकि, कभी-कभी मैं पुस्तकालयों के साथ काम करता हूं जो मध्यवर्ती चर में अपने रिटर्न मानों को संग्रहीत नहीं करते हैं।पाइथन डीबगर में किसी फ़ंक्शन से इंटरमीडिएट के बिना वापसी मूल्य को आप कैसे देखते हैं?

def do_stuff(*args, **kwds): 
    return f(*args, **kwds) 

बाद मैं च से लौटने, मैं कैसे वापसी मान देख पा रहे हैं:

यहाँ एक उदाहरण समारोह है? मैं एक मध्यवर्ती के लिए पुस्तकालयों को फिर से लिखने सकता है के बाद मैं उन्हें डाउनलोड:

def do_stuff(*args, **kwds): 
    r = f(*args, **kwds) 
    return r 

लेकिन ऐसा लगता है जैसे वहाँ एक बेहतर तरीका होना चाहिए।

+2

साथ जवाब देने के लिए यह खड़ा के रूप में, 'f' के रिटर्न मान लूंगा 'do_stuff' का वापसी मूल्य भी हो। आप या तो इसे देख सकते हैं, या इसे 'r = f (...) जैसे कुछ में बदल सकते हैं; प्रिंट (आर); वापसी आर' - मुझे लगता है कि आपका प्रश्न उस से अधिक जटिल है, हालांकि। क्या आप स्पष्टीकरण दे सकते हैं? – jedwards

+0

यह वास्तव में मुख्य प्रश्न है; क्या मध्यस्थ के बिना उस मूल्य को देखने का कोई तरीका है? – Chris

+1

PyCharm में यह सुविधा रखने के लिए कृपया https://youtrack.jetbrains.com/issue/PY-13540 –

उत्तर

9

आप एक छिपे हुए __return__ स्थानीय चर पर विचार कर सकते हैं।

(Pdb) sorted(locals().keys()) 
['__return__', 'xyz', ...] 

संपादित:

अगर मैं भूल जाते हैं यह सही नाम है, मैं यह द्वारा पता लगाने के बाद मेरे से संबंधित example for __return__

+0

कूल, धन्यवाद!यह देखना होगा कि क्या ग्रहण में यह काम करता है, लेकिन मुझे लगता है कि यह डिफ़ॉल्ट रूप से पीडीबी का उपयोग करता है ... – Chris

+1

मुझे एक पीडीबी कमांड 'रिटावल' भी मिला, लेकिन मुझे लगता है कि "__return__" अधिक सार्वभौमिक और अधिक उपयोगी है यदि वापसी मूल्य एक है जटिल वस्तु जिसे विस्तार से मुद्रित नहीं किया जा सकता है। – hynekcer

1

क्या आप और समझा सकते हैं?

  • डीबगर द्वारा, क्या आपका मतलब है कि आप लॉगर का उपयोग कर रहे हैं? क्या आप एक आईडीई के साथ कदम बढ़ा रहे हैं?
  • "वापसी मूल्य देखें" से आपका क्या मतलब है? आप इसे मुद्रित करने के लिए ... चाहते हैं

    def do_stuff(*args, **kwds): 
        result = f(*args, **kwds) 
        print result 
        return result 
    
+0

मैं ग्रहण का उपयोग कर रहा हूं, और उस प्रकार का इंटरमीडिएट कोड वह है जो मैं संभव होने पर उपयोग करना टालना चाहता हूं। धन्यवाद! – Chris

4

pdb में, जब फ़ंक्शन एक ->'value' दिए गए मान के प्रतिनिधित्व के साथ पंक्ति के अंत में जोड़ा जाता है।

उदाहरण के लिए:

(Pdb) s 
--Return-- 
> test.py(12)do_stuff()->'f' 
-> return result 
(Pdb) q 

मतलब है do_stuff() लौटे 'f'

+0

अगर मैं इस अधिकार को समझता हूं, तो वापसी से पहले एक कदम वापसी मूल्य दिखाएगा, है ना? क्या यह ग्रहण के कार्यान्वयन में काम करता है? – Chris

+0

नहीं, यह वास्तव में तब होता है जब फ़ंक्शन वापस आता है। मुझे ग्रहण कार्यान्वयन के बारे में निश्चित नहीं है, इसे पीडीबी (मानक लाइब्रेरी में मिले डीबगर) का उपयोग करना चाहिए – KurzedMetal

+0

यह हमेशा उपयोगी नहीं होता है, खासकर जब रिटर्न वैल्यू लंबा या ऑब्जेक्ट होता है। – Kevin

संबंधित मुद्दे