के बाद हटाए गए 'को छोड़कर' खंड में बाध्यकारी नाम पाइथन को नाम बाध्यकारी से कैसे रोक सकता है, जब वह नाम पकड़ा गया अपवाद बाध्य करने के लिए उपयोग किया जाता है? व्यवहार में यह परिवर्तन कब पाइथन में आया?क्लॉज
मैं दोनों अजगर 2 और अजगर 3 पर चलने के लिए कोड लिख रहा हूँ:
exc = None
try:
1/0
text_template = "All fine!"
except ZeroDivisionError as exc:
text_template = "Got exception: {exc.__class__.__name__}"
print(text_template.format(exc=exc))
सूचना है कि exc
स्पष्ट रूप से, स्वाभाविक है अपवाद हैंडलिंग से पहले तो अजगर जानता है कि यह बाहरी क्षेत्र में एक नाम है।
अजगर 2.7 पर, यह ठीक चलाता है और exc
नाम में प्रयोग की जाने वाली बचता format
कॉल ::
Got exception: ZeroDivisionError
बढ़िया है, यह ठीक है कि मैं क्या चाहता हूँ: except
खंड नाम बांधता और अपवाद ऑब्जेक्ट को संदर्भित करने के लिए मैं शेष नाम में उस नाम का उपयोग कर सकता हूं।
अजगर 3.5 पर, format
कॉल के विफल होने की वजह से जाहिरा तौर पर exc
बंधन हटा दी जाती है ::
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
NameError: name 'exc' is not defined
क्यों exc
बाहरी गुंजाइश से हटा बंधन है?except
खंड के बाद का उपयोग करने के लिए बाध्यकारी नाम को विश्वसनीय रूप से संरक्षित करने के लिए का अर्थ है?
यह परिवर्तन पाइथन में कब आया, यह कहां दस्तावेज है?
क्या मुझे इसे पायथन 3 में एक बग के रूप में रिपोर्ट करने का अधिकार होगा?
यह इरादा दिखता है:
try
/except
कोड के लिए disassembly के भी स्पष्ट रूप से प्रलेखन द्वारा किए गए ऊपर बयान का समर्थन करता है। यदि आप 'छोड़कर' खंड के भीतर किसी अन्य चर के लिए 'exc' असाइन करते हैं तो आप इसे वहां पुनर्प्राप्त कर सकते हैं। संभावित डुप्लिकेट https://stackoverflow.com/questions/29268892/python-3-exception-deletes-variable-in-enclosing-scope-for- अज्ञात- मुझे पता था कि मुझे यह जवाब देना चाहिए था ... lol –