2016-12-30 16 views
5

AttributeError возникает, когда я использую код примера из документации python (here). Пример кода выглядит следующим образом:с os.scandir() повышает AttributeError: __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

Поддержка контекста менеджер была добавлена ​​в 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 или, если вы не можете , не используйте его в качестве менеджера контекста.

2

документы говорят

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

Вы, вероятно, используете старую версию Python.

+0

Всё. Я все еще был на 3.5.2.3.6 отлично работает, спасибо! –