在Python的Try/Except中添加额外操作后不完整的for循环



假设我有以下嵌套列表,名为val。

这是原始代码:

val = [[63, 59, 47], 54, [59, 54, 47], [66, 59, 54], [65, 61]]
a = []
for i in range(len(val) - 1):
#multiple notes at the same time
try:
if len(val[i]) > 1:
for j in val[i]:
if len(val[i+1]) > 1:
#multiple to multiple
print(val[i+1])
for k in val[i+1]:
print(k)
except:
print('not importent')

结果:

not importent
not importent
[66, 59, 54]
66
59
54
[66, 59, 54]
66
59
54
[66, 59, 54]
66
59
54
[65, 61]
65
61
[65, 61]
65
61
[65, 61]
65
61

我发现有趣的是,如果我在try块的print(k)之后添加其他操作,如a[0] = 1, print(k)只执行一次,而不是完整地打印整数

val = [[63, 59, 47], 54, [59, 54, 47], [66, 59, 54], [65, 61]]
a = []
for i in range(len(val) - 1):
#multiple dots at the same time
try:
if len(val[i]) > 1:
for j in val[i]:
if isinstance(val[i+1],int):
#multiple to one
print('single value')
elif len(val[i+1]) > 1:
#multiple to multiple
print(val[i+1])
for k in val[i+1]:
print(k)
a[0] = 1
except:
print('not importent')

结果

not importent
not importent
[66, 59, 54]
66
not importent
[65, 61]
65
not importent

谁能解释一下为什么会这样?即使我在print(k)之后添加了更多的操作,我如何使for循环完成?

Lista初始化,但没有附加任何值;但你试图在特定的索引中赋值,这在Python中是不正确的。因此,它会向您抛出超出范围的列表索引问题在这里,a[0] = 1

所以你可以做什么来调试这个问题是你应该删除try/catch。找到问题所在后,再次将代码放入try/catch块中。

快乐编码…!

最新更新