关于python:使用os.scandir()引发AttributeError:__ exit__

with os.scandir() raises AttributeError: __exit__

当我使用Python文档中的示例代码(这里)时,会引发一个AttributeError。示例代码如下:

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

结果是一个AttributeError

1
2
3
4
5
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()分配给变量还是可以的。有人能告诉我我错过了什么吗?


在python 3.6中添加了上下文管理器支持,尝试将其与以前的版本一起使用会导致错误,因为它不是上下文管理器(python尝试首先加载__exit__)。

这在scandir的文档(在您看到的代码片段下)中说明:

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

(强调我的)

您可以更新到python 3.6,如果不能,就不要将其用作上下文管理器。


医生说

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

您可能正在运行一个旧的python版本。