2017-03-08 133 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]的設計不是優雅地失敗,因此會引發異常。