为什么python列表切片允许引用非';不在那里吗?

为什么python列表切片允许引用非';不在那里吗?,python,slice,Python,Slice,考虑以下代码: >>> arr = np.array(['A', 'B', 'C']) >>> arr[0:20] array(['A', 'B', 'C'], dtype='|S1') 为什么允许我将数组切片超过3?我希望这会引发一个错误,因为没有20个条目可供引用。这也适用于常规列表切片、字符串切片、元组切片以及大多数可切片对象。这只是Python的惯例,允许范围外切片并将范围外切片端点调整到序列的最近端点。这是从 给定一个类似于s[i:j

考虑以下代码:

>>> arr = np.array(['A', 'B', 'C'])
>>> arr[0:20]
array(['A', 'B', 'C'], 
      dtype='|S1')

为什么允许我将数组切片超过
3
?我希望这会引发一个错误,因为没有20个条目可供引用。

这也适用于常规列表切片、字符串切片、元组切片以及大多数可切片对象。这只是Python的惯例,允许范围外切片并将范围外切片端点调整到序列的最近端点。

这是从

给定一个类似于
s[i:j:k]
的切片表达式


步骤k中s从i到j的切片被定义为索引x=i+n*k的项目序列,因此0此行为与Python列表切片一致:为什么这样的问题需要在开发讨论中找到解释。因为这已经是
numpy
python
的一部分很长时间了,所以很难找到它。它可能早于现代使用的
github
PEP
。见鬼,它早于旧的Mercurial存储库,也可能早于Subversion repo。这并不能回答我的问题。为什么它是这样设计的?抛出一个错误似乎更好。@kilojoules这就是python如何优雅地处理这种情况,而不会像其他语言一样抛出丑陋的越界异常。python就是这样设计的。我很难理解设计决策。这样做有什么好处?@千焦耳对不起。。。据我所知,目前还没有官方声明,但我确实相信这会带来更健壮的编程,偶尔会产生无意的副作用。谢谢!我更新了我的问题。现在我要问的是为什么python一般都会这样做。