2017-03-08 135 views
1

我真的很困惑,现在:空字符串返回而不是IndexError

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

为什么string[100:105]返回一个空字符串,而string[100]引发IndexError(如预期)?为什么string[100:105]不会引发IndexError?

+2

因为这就是它的定义。切片永远不会引起索引错误。 –

+0

这只是他们做出的奇怪的设计决定。 – user2357112

+0

http://stackoverflow.com/questions/9490058/why-substring-slicing-index-out-of-range-works-in-python。标记为重复 – nir0s

回答

0

python中的字符串切片不会引发错误,它们只会返回您正在查找的字符串(在这种情况下,它确实是一个空字符串,因为这里没有任何内容)。

切片返回一个项目的子序列,它并没有做任何绑定检查。如果想要的数据(内存)是空的,它会返回一个空字符串,如你所知。

1

在Python中对字符串进行切片时,string[100:105]的操作是专门为了优雅地失败而设计的。超范围切片的结果是返回空字符串''。有关更多信息,请参阅Informal Introduction

访问某个字符串的特定索引时,string[100]的设计不是优雅地失败,因此会引发异常。