我试图在同一个循环中捕获多个IndexErrors,但是只能捕获第一个循环。This问题可能与我的问题有关,但我无法理解。如果有帮助的话,我将在Windows 10和Python2.7.13上使用EnThindeCanpi1.6.2。
import numpy as np
some_array=np.zeros(10)
some_set=[2,4,15,19]
for sense in some_set:
try:
some_array[sense]=1
except IndexError:
some_set.remove(sense)
print some_set, "sense"我收到的输出是:
2,4,19感官
当我想要表单的输出时
2,4,19感官 2,4感官
发布于 2019-08-05 12:23:25
您的问题来自于您正在修改正在循环的数组这一事实。在python中,for x in y:与for i in range(len(y)): x = y[i]基本相同。
问题是,您位于循环中的索引2,这将生成元素15。然后捕获错误并从数组中删除15。一切都很好。但是,现在遍历的数组是[2, 4, 19],您刚刚结束了一次迭代,让Python知道索引3处的元素是什么,不再有索引3,所以Python将终止循环。
要阻止问题的发生,只需对数组的副本进行循环,这样就不会使用.copy()或[:]更改也正在检查的数组。
import numpy as np
some_array=np.zeros(10)
some_set=[2,4,15,19]
for sense in some_set[:]: # This line was changed to use [:]
try:
some_array[sense]=1
except IndexError:
some_set.remove(sense)
print some_set, "sense"发布于 2019-08-05 12:23:35
整个循环都没有停止。
试着把21这样的数字加到你的片尾,我想你会看到发生了什么。
Python读取循环的索引0,然后是1,然后是2等等。所以它读取2(索引0),然后4(索引1),然后15 (索引2)并删除它。但是列表是2,4,19,21,它读的是索引3。
[2, 4, 19, 21] sense
[2, 4, 19] sense正如bereal所提到的,在迭代集合时,您应该避免修改它。
https://stackoverflow.com/questions/57358366
复制相似问题