【发布时间】:2020-09-01 17:29:28
【问题描述】:
代码给出了所有测试用例的正确答案,除非我输入一个列表,例如 [1,2,3,4,5]。然后显示:
IndexError:列表索引超出范围。
为什么会这样?最后的else 语句不应该解决这个问题吗?
def func(n):
my_list = n.split()
l = []
for i in my_list:
l.append(int(i))
if len(l)==0 or len(l)==1:
return None
for k in range(0, len(l)):
if l[k+1] >= l[k] + 2:
return l[k+1]
else:
return None
n = input()
print(func(n))
【问题讨论】:
-
else的缩进和问题一样吗? -
l[k+1]中的k+1在if条件下无论如何都超出了范围 -
使用
try、catch和except进行错误处理。 -
使用
for k in range(0,len(l)),k 将从 0 变为 len(l)-1。当 k 等于 len(l)-1 时,这会导致 l[k+1] 超出if l[k+1]>=l[k]+2:的范围。 -
您能指定您输入的确切输入吗?因为我无法重现您的错误,我也不希望能够重现。你永远不会迭代列表的末尾,因为你总是在
if/else中的任何一个分支之后return。这可能不是您真正想要的,但您不应该得到IndexError。请确保这是minimal reproducible example。如果它不能用你的代码重现,它对我们没有多大好处!
标签: python index-error