2010-11-08 32 views
15

không unsubscriptable có ý nghĩa gì trong bối cảnh của một TypeError như trong:Python unsubscriptable

TypeError: 'int' object is unsubscriptable 

EDIT: mã ngắn ví dụ mà dẫn đến hiện tượng này.

a=[[1,2],[5,3],5,[5,6],[2,2]] 
for b in a: 
    print b[0] 

> 1 
> 5 
> TypeError: 'int' object is unsubscriptable 
+7

Vui lòng bao gồm mã đã tạo thông báo. Vui lòng bao gồm mẫu mã ** nhỏ nhất ** thực sự tạo ra thông báo lỗi này. –

+2

Bắt đầu tốt. Cảm ơn. Bước 2. In các giá trị của 'b'. Bạn có thể cắt ví dụ xuống chỉ bằng một giá trị cụ thể của 'b' có vấn đề này. Bạn có thể làm điều đó bước tiếp theo không? –

+0

@ S.Lott - Ok giờ sẽ rõ ràng hơn. – Theodor

Trả lời

26

Điều đó có nghĩa là bạn đã thử xử lý số nguyên làm mảng. Ví dụ:

a = 1337 
b = [1,3,3,7] 
print b[0] # prints 1 
print a[0] # raises your exception 
7

Bạn đang cố gắng để tra cứu một subscript mảng của một int:

>>> 1[0] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is unsubscriptable 

Đó là, dấu ngoặc vuông [] là các nhà điều hành subscript. Nếu bạn cố gắng áp dụng toán tử subscript cho một đối tượng không hỗ trợ nó (chẳng hạn như không thực hiện __getitem__()).

11

Sự cố trong mã mẫu của bạn là mảng "a" chứa hai loại khác nhau: nó có 4 danh sách 2 phần tử và một số nguyên. Sau đó bạn đang cố gắng để sub-script mọi phần tử trong "a", bao gồm cả phần tử nguyên.

Nói cách khác, mã của bạn đang làm một cách hiệu quả:

print [1,2][0] 
print [5,3][0] 
print 5[0] 
print [5,6][0] 
print [2,2][0] 

Đó dòng giữa nơi nó "5 [0]" là những gì được tạo ra lỗi.