在python字符串上使用切片运算符[:]不会导致越界错误

Pra*_*att 0 python string

我刚刚开始学习python,并且正在使用slice(:)运算符和字符串。由于某些原因,如果我指定了无效的索引,然后是切片运算符,则不会给出“超出范围”错误。

>>> s='Hello'
>>> print s[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

>>> print s[5:]
//Prints just a newline, no error
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么我在第二种情况下没有出错。

Sim*_*ser 5

从切片文档:

退化切片索引的处理非常优美:太大的索引将替换为字符串大小,上限小于下限的字符串将返回一个空字符串。

换句话说:索引可能太大,但是在这种情况下,它会被字符串大小代替。

请注意,您的字符串s有五个字符,因此s[5:]与调用相同s[len(s):],也与获取空字符串相同(因为缺少的上限也默认len(s)为,因此最终变为s[len(s):len(s)])。