मेरे पास मेरी स्क्रिप्ट में try
/finally
खंड है। क्या finally
खंड के भीतर से सटीक त्रुटि संदेश प्राप्त करना संभव है?क्या मुझे अंत में पाइथन में अपवाद प्राप्त हो सकता है?
उत्तर
नहीं, finally
समय sys.exc_info
सभी कोई नहीं है, कि क्या वहाँ एक अपवाद या नहीं किया गया है। का उपयोग करें:
try:
whatever
except:
here sys.exc_info is valid
to re-raise the exception, use a bare `raise`
else:
here you know there was no exception
finally:
and here you can do exception-independent finalization
आप इसे छोड़कर खंड में करना चाहते हैं, अंत में नहीं।
संदर्भ लें करने के लिए: http://www.doughellmann.com/articles/Python-Exception-Handling/
finally
ब्लॉक के लिए कि क्या एक अपवाद उत्पन्न हुआ था या नहीं निष्पादित किया जाएगा, ताकि जोश बताते हैं, आप बहुत संभावना नहीं है वहाँ यह निपटने जाना चाहते हैं।
यदि आपको वास्तव में उठाए गए अपवाद के मूल्य की आवश्यकता है, तो आपको except
ब्लॉक में अपवाद पकड़ना चाहिए, या तो इसे उचित तरीके से संभाल लें या इसे फिर से उठाएं, और उसके बाद अंत में ब्लॉक में उस मान का उपयोग करें - - उम्मीद के साथ कि यह कभी भी सेट नहीं किया जा सकता है, अगर निष्पादन के दौरान कोई अपवाद नहीं उठाया गया था।
import sys
exception_name = exception_value = None
try:
# do stuff
except Exception, e:
exception_name, exception_value = sys.exc_info()[:2]
raise # or don't -- it's up to you
finally:
# do something with exception_name and exception_value
# but remember that they might still be none
असल में, अन्य उत्तरों थोड़ा अस्पष्ट हैं। तो, मुझे इसे स्पष्ट करने दें। आप अंततः ब्लॉक से sys.exc_info() का आह्वान कर सकते हैं। हालांकि, इसका उत्पादन इस बात पर निर्भर करेगा कि अपवाद वास्तव में उठाया गया है या नहीं।
import sys
def f(i):
try:
if i == 1:
raise Exception
except Exception as e:
print "except -> " + str(sys.exc_info())
finally:
print "finally -> " + str(sys.exc_info())
f(0)
f(1)
>>>
finally -> (None, None, None)
except -> (<type 'exceptions.Exception'>, Exception(), <traceback object at 0x029438F0>)
finally -> (<type 'exceptions.Exception'>, Exception(), <traceback object at 0x029438F0>)
इस प्रकार, आप हमेशा अंत में ब्लॉक में पता कर सकते हैं, चाहे अपवाद उठाया गया था, अगर यह पहले के स्तर सुविधा नहीं होती। लेकिन sys.exc_info() अलग-अलग व्यवहार करेगा जब कॉल स्टैक की लंबाई 1 से अधिक हो जाएगी, जैसा कि नीचे उदाहरण में दिखाया गया है। अधिक जानकारी के लिए, How sys.exc_info() works?
import sys
def f(i):
try:
if i == 1:
raise Exception
except Exception as e:
print "except -> " + str(sys.exc_info())
finally:
print "finally -> " + str(sys.exc_info())
def f1(i):
if i == 0:
try:
raise Exception('abc')
except Exception as e:
pass
f(i)
f1(0)
f1(1)
>>>
finally -> (<type 'exceptions.Exception'>, Exception('abc',), <traceback object at 0x02A33940>)
except -> (<type 'exceptions.Exception'>, Exception(), <traceback object at 0x02A33990>)
finally -> (<type 'exceptions.Exception'>, Exception(), <traceback object at 0x02A33990>)
मुझे आशा है कि का उल्लेख यह चीजों को थोड़ा स्पष्ट कर देता है।
यह केवल python2 के लिए सच है। – coldfix
@coldfix क्या आपका मतलब यह है कि यह केवल python3 के लिए सच है? –
नहीं, मैं दोनों python2 और python3 पर स्क्रिप्ट निष्पादित करता हूं। पायथन 3 पर (मामूली वाक्य रचनात्मक मुद्दों को ठीक करने के बाद), 'एफ (1) 'के लिए आउटपुट' अंत में -> (कोई नहीं, कोई नहीं, कोई नहीं) 'है, इसलिए आप अंततः उस ब्लॉक को अपवाद नहीं प्राप्त कर सकते हैं। – coldfix
से ठीक पहले try
except
ब्लॉक संभावित अपवाद के लिए एक खाली चर को परिभाषित:
import sys
exception = None
try:
result = 1/0
except ZeroDivisionError as e:
exception = sys.exc_info() # or "e"
finally:
if exception:
print(exception)
else:
print('Everything is fine')
अजगर 3.6 पर
- 1. अंत में अपवाद हैंडलिंग
- 2. लाइन के अंत में पाइथन में क्या होता है?
- 3. मुझे "अमान्य एल्गोरिदम निर्दिष्ट" क्यों प्राप्त हो रहा है अपवाद
- 4. सी ++ अपवाद, क्या() पूर्ण हो सकता है?
- 5. वास्तव में पाइथन से बहुत तेज हो सकता है?
- 6. क्या मुझे .NET में अपवाद या एप्लिकेशन अपवाद से कस्टम अपवाद प्राप्त करना चाहिए?
- 7. कोड के माध्यम से मुझे पाइथन मॉड्यूल का संस्करण संख्या कैसे प्राप्त हो सकता है?
- 8. मुझे अपने कैलेंडर से दिनांक कैसे प्राप्त हो सकता है?
- 9. पाइथन ऐरे कितना बड़ा हो सकता है?
- 10. क्या यूआरएल में तारांकन हो सकता है?
- 11. पाइथन में पुराना हो गया है?
- 12. अंत में
- 13. क्या कोई मुझे इस लैम्ब्डा अभिव्यक्ति को समझा सकता है? यह मुझे पागल हो रहा है
- 14. क्या कोई मुझे सी ++ अपवाद विनिर्देशों को समझा सकता है?
- 15. क्या कोई मुझे पाइथन 3 में स्टडीन और स्टडआउट में त्वरित ट्यूटोरियल दे सकता है?
- 16. पायथन में डिवीजन ऑपरेटर का उपयोग करते समय मुझे दशमलव मान कैसे प्राप्त हो सकता है?
- 17. एक समेकित अपवाद में 1 से अधिक आंतरिक अपवाद कब हो सकता है?
- 18. पाइथन प्राप्त लाइनों के अंत में एक अतिरिक्त सीआर जोड़ता है
- 19. ग्रहण में जीपीबी के लिए मुझे समर्थन कैसे प्राप्त हो सकता है?
- 20. क्या मुझे अपने यूआरएल के अंत में .htm रखना चाहिए?
- 21. क्या बेस 64 एन्कोडेड स्ट्रिंग में व्हाइटस्पेस हो सकता है?
- 22. रैली कार्डबोर्ड घटक में दिखाई देने के लिए मुझे स्क्रॉलबार कैसे प्राप्त हो सकता है?
- 23. मुझे लेबल में टेक्स्ट बेसलाइन की स्थिति और न्यूमेरिक अपडाउन कैसे प्राप्त हो सकता है?
- 24. क्या एक यूआरएल में अर्ध-कॉलन हो सकता है?
- 25. क्या .NET में एक पठनीय क्षेत्र शून्य हो सकता है?
- 26. पायथन कोशिश-अंत में
- 27. क्या मुझे document.ready() पर एक jQuery डिफर्ड प्राप्त हो सकता है?
- 28. सी # में आरक्षित अपवाद फेंकते समय क्या गलत हो सकता है?
- 29. SqlConnection.Open() में टाइमआउट क्यों हो सकता है?
- 30. क्या घर विजेट में कोई संदर्भ हो सकता है?
धन्यवाद परीक्षण किया गया। sys.exc_info (एक छोड़कर खंड में) मुझे – Goutham
की आवश्यकता है जो पाइथन 3 के रूप में है।?, आप 'sys.exc_info' को 'अंत में'' ब्लॉक से एक्सेस कर सकते हैं। – Kentzo
@ कंट्जो मैंने अभी इसे पायथन 3.6 में बाहर करने की कोशिश की। जब आपने अपवाद उठाया तो अंत में ब्लॉक में sys.exc_info() 'रिटर्न' (कोई नहीं, कोई नहीं, कोई नहीं) '। – Jonathan