with os.scandir() raises AttributeError: __exit__

5.6k views Asked by At

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?

2

There are 2 answers

0
Dimitris Fasarakis Hilliard On BEST ANSWER

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.

1
Nils Werner On

The docs say

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

You are probably running an older Python version.