|
发表于 2024-5-14 22:40:52
|
显示全部楼层
本帖最后由 isdkz 于 2024-5-14 22:42 编辑
[b]首先传入的索引不对抛出的错误并不是语法错误,而是类型错误
>>> t = [[1, 1, 0], [1, 2, 0]]
>>> t[0, 1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple
至于对象能接收什么样的索引是由 __getitem__ 方法决定的,
例子:
>>> class List(list):
... def __getitem__(self, y):
... if isinstance(y, int) or isinstance(y, slice):
... return super().__getitem__(y)
... elif isinstance(y, tuple) or isinstance(y, list):
... return [self[i] for i in y]
... else:
... raise TypeError(f"List indices must be integers or slices or tuple or list, not {type(y)}")
...
>>> t = List([1, 2, 3, 4, 5, 6])
>>> t
[1, 2, 3, 4, 5, 6]
>>> t[1]
2
>>> t[1: 4]
[2, 3, 4]
>>> t[1, 4]
[2, 5]
>>> t[{1, 2}]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in __getitem__
TypeError: List indices must be integers or slices or tuple or list, not <class 'set'>
>>> [/b] |
|