2011-11-03 10 views
6

मैंने हाल ही में ipython0.10 से ipython0.11 पर स्विच किया है। Ipython0.11 में, जब मैं पाइथन डीबगर संलग्न करता हूं (यानी %pdb का उपयोग करके), तो मुझे केवल पूर्ण ट्रेसबैक का एक छोटा स्निपेट दिखाई देता है, जबकि ipython0.10 में मैं पूर्ण ट्रेसबैक देखता हूं। जहां तक ​​मैं कह सकता हूं, पूर्ण ट्रेसबैक पीडीबी कमांड लाइन से सीधे पहुंच योग्य नहीं है - आप इसे 'यू' के साथ नेविगेट कर सकते हैं लेकिन इसे सीधे नहीं देख सकते हैं।आईपीथॉन डीबगर: इंटरैक्टिव पीडीबी पर पूर्ण ट्रेसबैक?

तो, क्या पूर्ण ट्रेसबैक दिखाने का कोई तरीका है? एक विन्यास पैरामीटर के रूप में?

या इससे भी अधिक उपयोगी बात यह है कि आईपीथॉन को पकड़ा गया अपवाद दिखाने का कोई तरीका है, यह दिखाने के बजाए कि पकड़े गए कोड में कहां रखा गया था?

संपादित करें: उदाहरण:

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

In [2]: 1/0 
> <ipython-input-2-05c9758a9c21>(1)<module>() 
    -1 1/0 

ipdb> q 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 
/Users/adam/<ipython-input-2-05c9758a9c21> in <module>() 
----> 1 1/0 

ZeroDivisionError: integer division or modulo by zero 

मैंने पहलेq 'pdb से बाहर ing ZeroDivisionError देखना चाहते हैं।

+1

यह आईपीथन 0 में एक बग है।11 - शुरू होने से पहले, डीबगर छोड़ने के बाद ट्रेसबैक मुद्रित किया जाता है। यह 0.12 के लिए तय किया जाएगा (जो क्रिसमस से पहले बाहर होना चाहिए)। –

उत्तर

6

क्या आईपीथॉन सिर्फ अपवाद दिखाता है कि पकड़ा गया था, यह दिखाने के बजाए कि कोड पकड़ा गया था? sys module documentation से

import sys 

def exc_hook(type, value, traceback): 
    print type 

sys.excepthook = exc_hook 

:

आप sys.excepthook इस्तेमाल कर सकते हैं

sys.excepthook(type, value, traceback)

इस समारोह sys.stderr के लिए दिए गए ट्रैस बैक और अपवाद बाहर प्रिंट करता है।

जब एक अपवाद उठाया और ध्यान में न आया है, दुभाषिया तीन तर्कों, अपवाद वर्ग, अपवाद उदाहरण है, और एक ट्रैस बैक वस्तु के साथ sys.excepthook कहता है। एक इंटरैक्टिव सत्र में यह प्रॉम्प्ट पर नियंत्रण वापस आने से ठीक पहले होता है; एक पायथन प्रोग्राम में यह प्रोग्राम बाहर निकलने से ठीक पहले होता है। का प्रबंधन इस तरह के शीर्ष-स्तरीय अपवादों को तीन-तर्क फ़ंक्शन sys.excepthook पर असाइन करके अनुकूलित किया जा सकता है।

sys.__displayhook__
sys.__excepthook__

इन वस्तुओं को कार्यक्रम के शुरू में displayhook और excepthook के मूल मान हैं। वे सहेजे गए हैं ताकि डिस्प्लेशुक और एक्सेप्थुक को टूटी ऑब्जेक्ट्स के साथ प्रतिस्थापित करने के मामले में पुनर्स्थापित किया जा सके।


तुम भी --xmode विकल्प Plain

करने के लिए सेट IPython reference से साथ IPython शुरू करने का प्रयास कर सकते हैं: अपवाद रिपोर्टिंग के लिए

$ ipython [options] files 

--xmode=<modename> 

मोड।

मान्य मोड: सादा, संदर्भ और वर्बोज़।

सादा: पाइथन की सामान्य ट्रेसबैक प्रिंटिंग के समान।

संदर्भ: ट्रेसबैक में प्रत्येक पंक्ति के चारों ओर संदर्भ स्रोत कोड की 5 पंक्तियां मुद्रित करता है।

शब्दाडंबरपूर्ण: प्रसंग के समान है, लेकिन इसके साथ ही चर वर्तमान में दृश्यमान जहां अपवाद हुआ (यदि बहुत लंबा उनके तार छोटा) प्रिंट करता है। यह संभावित रूप से बहुत धीमा हो सकता है, यदि आप होते हैं तो एक विशाल डेटा संरचना है जिसका स्ट्रिंग प्रतिनिधित्व जटिल है गणना करने के लिए। आपका कंप्यूटर सीपीयू उपयोग 100% पर थोड़ी देर के लिए जमा हो सकता है। यदि ऐसा होता है, तो आप Ctrl-C के साथ ट्रेसबैक रद्द कर सकते हैं (शायद इसे एक से अधिक बार मारना)।

यहां कुछ उदाहरण उपयोग हैं। ध्यान दें कि प्रत्येक ट्रैस बैक के लिए लाइनों में अंतर:

--xmode=Plain:

[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Plain ipython-debugger-full-traceback-on-interactive-pdb.py 
------------------------------------------------------------ 
Traceback (most recent call last): 
    File "ipython-debugger-full-traceback-on-interactive-pdb.py", line 2, in <module> 
    1/0 
ZeroDivisionError: integer division or modulo by zero 

--xmode=Context:

[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Context ipython-debugger-full-traceback-on-interactive-pdb.py 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>() 
     1 
----> 2 #!/usr/bin/python 
     3 1/0 
     4 
     5 

ZeroDivisionError: integer division or modulo by zero 

--xmode=Verbose:

[ 19:54 [email protected] ~/SO/python ]$ ipython --xmode=Verbose ipython-debugger-full-traceback-on-interactive-pdb.py 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>() 
     1 
----> 2 #!/usr/bin/python 
     3 1/0 
     4 
     5 

ZeroDivisionError: integer division or modulo by zero 

और एक .py फ़ाइल निर्दिष्ट किए बिना:

--xmode=Plain:

[ 19:55 [email protected] ~/SO/python ]$ ipython --xmode=Plain 

In [1]: 1/0 
------------------------------------------------------------ 
Traceback (most recent call last): 
    File "<ipython console>", line 1, in <module> 
ZeroDivisionError: integer division or modulo by zero 

--xmode=Context:

[ 20:03 [email protected] ~/SO/python ]$ ipython --xmode=Context 

In [1]: 1/0 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/jon/SO/python/<ipython console> in <module>() 

ZeroDivisionError: integer division or modulo by zero 

--xmode=Verbose:

[ 20:01 [email protected] ~/SO/python ]$ ipython --xmode=Verbose 


In [1]: 1/0 
--------------------------------------------------------------------------- 
ZeroDivisionError       Traceback (most recent call last) 

/home/jon/SO/python/<ipython console> in <module>() 

ZeroDivisionError: integer division or modulo by zero 

Using the Python debugger

+0

आपके संदेश का दूसरा भाग (--xmode) उत्तर की तरह लगता है, लेकिन ऐसा लगता है कि यह काम नहीं करता है। मैंने सभी 3 मोडनामों का प्रयास किया है और सभी ट्रेसबैक समान दिखते हैं। कोई विचार क्या कारण है? – keflavich

+1

उपरोक्त मेरे संपादन देखें। – chown

+0

धन्यवाद। दुर्भाग्यवश, यह इंगित करता है कि संभवतया एक त्रुटि क्या है (मेरी प्रतिलिपि?) Ipython: '$ ipython --xmode = सादा चेतावनी: अपरिचित एलियास: 'xmode', इसका शायद कोई प्रभाव नहीं पड़ेगा। 'हालांकि, एक बार ipython में : 'में [1]:% xmode अपवाद रिपोर्टिंग मोड: सादा' ठीक काम करता है – keflavich

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