python - पायथन प्रॉम्प्ट पर एक त्रुटि के बाद अंतिम अपवाद ऑब्जेक्ट कैसे प्राप्त करें?




exception try-catch (2)

इंटरैक्टिव प्रॉम्प्ट (REPL) में पायथन कोड को डीबग करते समय, अक्सर मैं कुछ कोड लिखता हूं, जो एक अपवाद को जन्म देता है, लेकिन मैंने इसे एक try में नहीं छोड़ा है / except , इसलिए एक बार त्रुटि उठने के बाद, मैंने हमेशा के लिए खो दिया अपवाद वस्तु।

अक्सर ट्रेसबैक और त्रुटि संदेश पायथन प्रिंट आउट पर्याप्त नहीं है। उदाहरण के लिए, URL प्राप्त करते समय, सर्वर 40x त्रुटि लौटा सकता है, और आपको error.read() माध्यम से प्रतिक्रिया की सामग्री की आवश्यकता होती है ... लेकिन आपको त्रुटि वस्तु अब नहीं मिली है। उदाहरण के लिए:

>>> import urllib2
>>> f = urllib2.urlopen('http://example.com/api/?foo=bad-query-string')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ...
urllib2.HTTPError: HTTP Error 400: Bad Request

Drat, प्रतिक्रिया के शरीर ने क्या कहा? शायद इसमें बहुमूल्य त्रुटि जानकारी थी ...

मुझे लगता है कि आमतौर पर एक कोशिश / छोड़कर अपने कोड को फिर से चलाना आसान है, लेकिन यह आदर्श नहीं है। मुझे यह भी एहसास है कि इस विशिष्ट मामले में अगर मैं requests पुस्तकालय (जो HTTP त्रुटियों के लिए नहीं उठाता) का उपयोग कर रहा था, तो मुझे यह समस्या नहीं होगी ... लेकिन अगर कोई और सामान्य तरीका है तो मुझे बहुत आश्चर्य होगा इन मामलों में पायथन प्रॉम्प्ट पर अंतिम अपवाद ऑब्जेक्ट।


जैसा कि @Cairnarvon ने उल्लेख किया है, मुझे कोई last_value सदस्य sys मॉड्यूल नहीं मिला।

sys.exc_info() ने मेरे लिए चाल sys.exc_info()sys.exc_info() तीन मूल्यों (type, value, traceback) साथ एक टपल लौटाता है।

तो sys.exc_info()[1] पठनीय त्रुटि देगा। यहाँ उदाहरण है,

import sys
list = [1,2,3,4]
try:
    del list[8]
except Exception:
    print(sys.exc_info()[1])

आउटपुट list assignment index out of range

इसके अलावा, traceback.format_exc() मॉड्यूल से traceback.format_exc() उपयोग इसी तरह की जानकारी को प्रिंट करने के लिए किया जा सकता है।

नीचे आउटपुट है अगर fortmat_exec() का उपयोग किया जाता है,

Traceback (most recent call last): File "python", line 6, in <module> IndexError: list assignment index out of range


sys मॉड्यूल अपवादों की पोस्ट-हॉक जाँच के लिए कुछ कार्य प्रदान करता है: sys.last_type , sys.last_value , और sys.last_traceback

sys.last_value वह है जिसे आप ढूंढ रहे हैं।





read-eval-print-loop