当索引位置未知时,最好使用切片而不是索引,因为索引返回超出范围的错误?
from random import randint
__index__=randint(0, 100)
print __index__
key="Some random string which comes on our way and we don't find the length"
''' Slicing is better when unknown length of a string?'''
x = key[__index__:__index__+1]
if x is '':
print("No value in slicing")
else:
print("Sliced value %s" %(x))
''' Indexing runs into IndexError: string index out of range when out of range'''
x = key[__index__]
if x is None:
print("No value in indexing")
else:
print("Indexed value %s" %(x))
当随机索引超出范围时,则会在索引编制中出错。在这种情况下使用切片更好吗?
$python main.py
98
No value in slicing
Traceback (most recent call last):
File "main.py", line 15, in <module>
x = key[__index__]
IndexError: string index out of range
答案 0 :(得分:0)
尝试一下:
from random import randint
index = randint(0, 100)
key = "Some random string which comes on our way and we don't find the length"
try:
print('Index value: {}'.format(key[index]))
except IndexError:
print('No value found with index: {}'.format(index))
要回答您的问题,最好索引一个未知长度的序列,而不是切片。
在您的代码中,key[__index__:__index__+1]
与key[__index__]
相同,除了如果找不到索引,则索引会引发IndexError
,而切片将返回空字符串(或元组,或者列表等)(如果找不到该切片)。无论如何,最好处理引发异常的情况,到那时,您知道找不到索引。这样也可以避免代码中不必要的if else
语句。
我希望这会有所帮助!
答案 1 :(得分:0)
当索引位置未知时,最好使用切片而不是索引。因为如果尝试检索超出对象范围的值,则按索引获取值可能会引发IndexError,因此,如果我们使用切片运算符,即使尝试检索该值也不会引发任何类型的错误。切片将简单地为未找到的任何索引返回一个空对象。
>>>l=[1,2,3,4,5,5]
>>>l[6:]
>>>[]
如您所见,即使索引6的值不存在,它也会返回一个空对象而不会引发任何错误。 对于同一示例,如果我们进行索引编制,则会引发错误
>>>l[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range