क्या आईपीथॉन सिर्फ अपवाद दिखाता है कि पकड़ा गया था, यह दिखाने के बजाए कि कोड पकड़ा गया था? 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 में एक बग है।11 - शुरू होने से पहले, डीबगर छोड़ने के बाद ट्रेसबैक मुद्रित किया जाता है। यह 0.12 के लिए तय किया जाएगा (जो क्रिसमस से पहले बाहर होना चाहिए)। –