python循环中的异常处理

2024-04-23 08:07:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在同一个循环中捕获多个索引器,但只能捕获第一个索引器。This问题可能与我的问题有关,但我无法理解。如果有帮助的话,我将在Windows10和Python2.7.13上使用Enthough Canopy 1.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] sense

而我想要一个表单的输出

[2, 4, 19] sense

[2, 4] sense


Tags: inimportnumpyforasnpzerossome
2条回答

您的问题源于您正在修改正在循环的数组。在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"

整个循环没有停止。你知道吗

试着在你的集合末尾加上一个像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提到的,在迭代集合时应该避免修改集合。你知道吗

相关问题 更多 >