2013-03-03 31 views
5

Tại sao các tập hợp và danh sách sản phẩm nào lại đưa ra các ngoại lệ khác nhau khi bạn gọi .pop()?Ngoại lệ khác nhau cho cửa sổ bật lên từ bộ và danh sách trống?

>>> l = [] 
>>> l.pop() 
Traceback (most recent call last): 
    File "<pyshell#15>", line 1, in <module> 
    l.pop() 
IndexError: pop from empty list 
>>> l = set() 
>>> l.pop() 
Traceback (most recent call last): 
    File "<pyshell#17>", line 1, in <module> 
    l.pop() 
KeyError: 'pop from an empty set' 

Trả lời

7

sets rất nhiều như dict s nhưng không có giá trị:

>>> d = {} 
>>> d.pop('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'pop(): dictionary is empty' 

Cả hai từ điển và bộ không được lập chỉ mục, như danh sách được, vì vậy một IndexError làm cho không có ý nghĩa ở đây. Nhưng như từ điển, chỉ có một giá trị của mỗi 'khóa' trong tập hợp.

+0

Đánh bại tôi bằng giây! – inspectorG4dget

+0

Nhận 'KeyError' khi khóa được cung cấp cho' dict.pop ({key value}) 'không tồn tại, bất kể từ điển có trống hay không, chắc chắn có ý nghĩa, nhưng không quá nhiều với' set.pop() 'không chấp nhận một đối số. Tôi đoán là nó tương thích với lớp 'Set' trong mô-đun [' sets'] (http://docs.python.org/2/library/sets.html) được giới thiệu trong Python 2.3 đã được triển khai bằng cách sử dụng từ điển theo tài liệu. – martineau

+0

@martineau: '.remove()' cũng tăng một 'KeyError'. Theo [cam kết này] (http://hg.python.org/cpython/file/3086620db46b/Objects/setobject.c) nó được mô hình hóa sau 'dict.pop()' * một cách rõ ràng *. –

7

Danh sách được sắp xếp theo thứ tự, được truy cập theo chỉ mục; các bộ không theo thứ tự và không tuần tự, được truy cập bằng khóa, do đó các thông báo lỗi.

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