问题
An AttributeError
is raised when I use the example code from python's documentation (here). The example code is as follows:
with os.scandir(path) as it:
for entry in it:
if not entry.name.startswith('.') and entry.is_file():
print(entry.name)
The result is an 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__
Although, assigning os.scandir()
to a variable works fine.
Could someone tell me what I'm missing?
回答1:
The context manager support was added in Python 3.6, trying to use it with previous versions will raise the error you see since it isn't a context manager (and Python tries to load __exit__
first).
This is stated in its documentation (right under the code snippet you saw) for scandir
:
New in version 3.6: Added support for the context manager protocol and the
close()
method. [...]
(Emphasis mine)
You can either update to Python 3.6 or, if you can't, don't use it as a context manager.
回答2:
The docs say
New in version 3.6: Added support for the context manager protocol
You are probably running an older Python version.
来源:https://stackoverflow.com/questions/41401417/with-os-scandir-raises-attributeerror-exit