2012-01-20 73 views
165

tôi tiếp tục nhận được một lỗi nói rằngPython: Thuộc tính Lỗi - đối tượng 'NoneType' không có thuộc tính 'cái gì'

AttributeError: 'NoneType' object has no attribute 'something' 

Mã tôi có là quá lâu để trả lời ở đây, nhưng tôi đã tự hỏi nếu ai đó có thể đưa ra ý chính về những tình huống chung nào sẽ gây ra 'AttributeError' này và những gì 'NoneType' có nghĩa là gì? (Thông thường bạn sẽ nhận được tên của một số đối tượng mà mã đã đi sai, nhưng vì nó mang lại cho tôi 'NoneType' tôi không chắc chắn làm thế nào nó có thể thu hẹp những gì đang xảy ra, khác với dòng #)

+5

Kéo ra một đoạn mã nhỏ nhất thể hiện sự cố. Đăng bài đó. Thêm các hàm 'print' (hoặc câu lệnh tùy thuộc vào phiên bản) để tiết lộ giá trị thực tế mà các biến thực sự có trong mã đang gặp sự cố này. –

+1

'NoneType' có nghĩa là loại = Không. Có thể bạn đang cố gắng truy cập vào biến chưa khai báo. Bạn nên đăng một ý chính để chúng tôi có thể giúp bạn. –

+2

@ LoïcGRENON: "biến không khai báo"? Trong Python? Điều đó không có ý nghĩa nhiều. Làm thế nào một tuyên bố một biến? –

Trả lời

168

NoneType means mà thay vì một thể hiện của bất kỳ Class hoặc Object nào bạn nghĩ rằng bạn đang làm việc với, bạn đã thực sự có None. Điều đó thường có nghĩa là một nhiệm vụ hoặc chức năng gọi lên trên không thành công hoặc trả về một kết quả không mong muốn.

69

Bạn có một biến bằng Không và bạn đang cố gắng truy cập thuộc tính của nó được gọi là 'cái gì đó'.

foo = None 
foo.something = 1 

hoặc

foo = None 
print foo.something 

Cả hai sẽ mang lại một AttributeError: 'NoneType'

10

Các NoneType là loại giá trị None. Trong trường hợp này, biến số lifetime có giá trị là None.

Cách thông thường để xảy ra điều này là gọi hàm thiếu một số return.

Có vô số cách khác để đặt biến thành Không, tuy nhiên.

+1

Tôi không nghĩ rằng 'thời gian tồn tại' có giá trị là' Không có' (trước khi chỉnh sửa). Anh ta đang cố gắng truy cập toàn bộ _attribute_ của cái gì đó khác là 'None'. –

29

Những người khác đã giải thích những gì NoneType là một cách phổ biến để kết thúc với nó (tức là, không trả về một giá trị từ một hàm).

Một lý do phổ biến khác mà bạn có None nơi bạn không mong đợi nó được gán cho một hoạt động tại chỗ trên một đối tượng có thể thay đổi. Ví dụ:

mylist = mylist.sort() 

Phương pháp sort() của một danh sách sắp xếp các danh sách tại chỗ, có nghĩa là, mylist được sửa đổi. Nhưng giá trị trả về thực tế của phương thức là None chứ không phải danh sách được sắp xếp. Vì vậy, bạn vừa chỉ định None đến mylist. Nếu bạn tiếp theo cố gắng làm, giả sử, mylist.append(1) Python sẽ cung cấp cho bạn lỗi này.

+2

Đó là những gì tôi đã làm, gán giá trị trả về của một hàm thực sự không trả về gì cho một biến. Cảm ơn! – Kaya311

4

Hãy xem xét mã bên dưới.

def return_something(someint): 
if someint > 5: 
    return someint 

y = return_something(2) 
y.real() 

Điều này sẽ cung cấp cho bạn các lỗi

AttributeError: 'NoneType' object has no attribute 'real'

Vì vậy điểm như dưới đây.

  1. Trong mã, một chức năng hoặc phương pháp lớp học không trở về bất cứ điều gì hoặc trả lại Không
  2. Sau đó, bạn cố gắng truy cập một thuộc tính của đối tượng trả lại (đó là None), gây ra thông báo lỗi.
Các vấn đề liên quan