2016-12-30 19 views
5

एक AttributeError उठाया जाता है जब मैं पायथन के दस्तावेज़ (here) से उदाहरण कोड का उपयोग करता हूं। उदाहरण के कोड इस प्रकार है:विशेषताएँ बढ़ाता है: __exit__

with os.scandir(path) as it: 
    for entry in it: 
     if not entry.name.startswith('.') and entry.is_file(): 
      print(entry.name) 

परिणाम एक AttributeError है:

D:\Programming>test.py 
Traceback (most recent call last): 
    File "D:\Programming\test.py", line 3, in <module> 
    with os.scandir() as it: 
AttributeError: __exit__ 

हालांकि, एक चर के लिए os.scandir() बताए ठीक काम करता है। क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रही है?

उत्तर

4

संदर्भ प्रबंधक समर्थन अजगर 3.6में जोड़ा गया है, क्योंकि यह एक संदर्भ प्रबंधक नहीं है (और अजगर __exit__ पहले लोड करने के लिए कोशिश करता है) पिछले संस्करणों के साथ उपयोग करने के लिए त्रुटि आप देख बढ़ा देंगे कोशिश कर रहा।

This is stated in its documentation (सही तहत कोड स्निपेट को देखा था) scandir के लिए:

New in version 3.6: Added support for the context manager protocol and the close() method. [...]

(जोर मेरा)

आप या तो अजगर 3.6 के लिए अद्यतन या, यदि आप नहीं कर सकते , इसे संदर्भ प्रबंधक के रूप में उपयोग न करें।

2

डॉक्स कहना

New in version 3.6: Added support for the context manager protocol

आप शायद एक पुराने अजगर संस्करण चला रहे हैं।

+0

यही है। मैं अभी भी 3.5.2.3.6 पर काम करता था, धन्यवाद! –

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