with os.scandir() raises AttributeError: __exit__
with os.scandir() raises AttributeError: __exit__
当我使用 python 文档 (here) 中的示例代码时,出现 AttributeError
。示例代码如下:
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()
分配给变量可以正常工作。
有人可以告诉我我错过了什么吗?
文档说
New in version 3.6: Added support for the context manager protocol
您可能 运行 是较旧的 Python 版本。
在 Python 3.6 中添加了上下文管理器支持,尝试将它与以前的版本一起使用会引发您看到的错误,因为它不是上下文管理器(并且 Python 尝试首先加载 __exit__
)。
This is stated in its documentation(就在 您看到的代码片段下方)对于 scandir
:
New in version 3.6: Added support for the context manager protocol and the close()
method. [...]
(强调我的)
您可以更新到 Python 3.6,如果不能,请不要将其用作上下文管理器。
当我使用 python 文档 (here) 中的示例代码时,出现 AttributeError
。示例代码如下:
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()
分配给变量可以正常工作。
有人可以告诉我我错过了什么吗?
文档说
New in version 3.6: Added support for the context manager protocol
您可能 运行 是较旧的 Python 版本。
在 Python 3.6 中添加了上下文管理器支持,尝试将它与以前的版本一起使用会引发您看到的错误,因为它不是上下文管理器(并且 Python 尝试首先加载 __exit__
)。
This is stated in its documentation(就在 您看到的代码片段下方)对于 scandir
:
New in version 3.6: Added support for the context manager protocol and the
close()
method. [...]
(强调我的)
您可以更新到 Python 3.6,如果不能,请不要将其用作上下文管理器。