2016-12-30 16 views
5

An AttributeError được nâng lên khi tôi sử dụng mã ví dụ từ tài liệu của python (here). Đoạn mã ví dụ như sau:với os.scandir() tăng AttributeError: __exit__

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

Kết quả là một 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__ 

Mặc dù, gán os.scandir() cho một biến hoạt động tốt. Ai đó có thể cho tôi biết tôi đang thiếu gì không?

Trả lời

4

Hỗ trợ trình quản lý ngữ cảnh được thêm vào Python 3.6, cố gắng sử dụng với phiên bản trước sẽ làm tăng lỗi bạn thấy vì nó không phải là trình quản lý ngữ cảnh (và Python cố tải __exit__ trước).

This is stated in its documentation (ngay dưới đoạn mã mã bạn nhìn thấy) cho scandir:

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

(tôi nhấn mạnh)

Bạn có thể cập nhật cho Python 3.6 hoặc, nếu bạn không thể , không sử dụng nó như một người quản lý ngữ cảnh.

2

Các tài liệu nói

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

Bạn đang có lẽ là chạy một phiên bản Python cũ.

+0

Vậy đó. Tôi vẫn còn trên 3.5.2.3.6 hoạt động hoàn hảo, cảm ơn! –

Các vấn đề liên quan