0

我刚刚开始学习 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

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

4

1 回答 1

7

从有关切片的文档中:

退化的切片索引被优雅地处理:一个太大的索引被字符串大小替换,一个小于下限的上限返回一个空字符串。

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

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

于 2013-11-11T18:45:22.650 回答