Python子序列运算符如何绕过索引错误?

时间:2013-03-26 01:52:59

标签: python string

好的,所以我正在经历一个Udacity课程,我一直试图通过Python字符串操作找出这个特殊的怪癖。

鉴于这种情况,

 1     x = ''    
 2     print x[0]

我会在第2行得到“索引超出范围”错误,因为我应该这样做,因为空字符串中没有第0个位置。

但是在这个场景中,

 1     x = ''    
 2     print x[0:]

无论如何都不会出现索引错误。 为什么?子序列运算符如何绕过应该存在的索引错误怎么样?

提前感谢您的帮助!


如果我不清楚,here是我正在谈论的问题的80秒解决方案的链接(对我当前的问题的解释不太令人满意)。

1 个答案:

答案 0 :(得分:2)

x[0]应返回单个元素,甚至可以是None。 (例如,[None][0] == None)所以当索引0处什么都没有时,它会返回什么?它不能返回任何内容 - 它甚至不能返回None,因为它None实际上在该索引处是不明确的。它必须提出异常。

另一方面,

x[0:]返回包含0个或更多元素的列表,因此它可以通过返回空列表返回“我找不到任何内容”。 (请注意,x[0:]未通过调用x[0] x[1]等实现,而是使用不同的基础代码。)