2016-12-30 54 views
5

An AttributeError jest wywoływany, gdy używam przykładowy kod z dokumentacji Pythona (here). Przykładowy kod jest następujący:z os.scandir() podnosi AttributeError: __exit__

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

Rezultatem jest 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__ 

Chociaż, przypisując os.scandir() do zmiennej działa dobrze. Czy ktoś może mi powiedzieć, czego mi brakuje?

Odpowiedz

4

Wsparcie kierownik kontekst dodano Python 3.6, starając się używać go z poprzednimi wersjami podniesie widzisz błąd, ponieważ nie jest menedżerem kontekst (i Python próbuje załadować __exit__ pierwsze).

This is stated in its documentation (tuż pod kod snippet obejrzałeś) dla scandir:

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

(Kopalnia nacisk)

Można Aktualizacja do Pythona 3.6 lub, jeżeli nie można , nie używaj go jako menedżera kontekstu.

2

Docs powiedzieć

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

Prawdopodobnie używasz starszej wersji Pythona.

+0

To wszystko. Nadal byłem na 3.5.2.3.6 działa idealnie, dzięki! –