首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中循环中的异常处理

python中循环中的异常处理
EN

Stack Overflow用户
提问于 2019-08-05 12:12:12
回答 2查看 1.1K关注 0票数 1

我试图在同一个循环中捕获多个IndexErrors,但是只能捕获第一个循环。This问题可能与我的问题有关,但我无法理解。如果有帮助的话,我将在Windows 10和Python2.7.13上使用EnThindeCanpi1.6.2。

代码语言:javascript
复制
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感官

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()[:]更改也正在检查的数组。

代码语言:javascript
复制
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"
票数 2
EN

Stack Overflow用户

发布于 2019-08-05 12:23:35

整个循环都没有停止。

试着把21这样的数字加到你的片尾,我想你会看到发生了什么。

Python读取循环的索引0,然后是1,然后是2等等。所以它读取2(索引0),然后4(索引1),然后15 (索引2)并删除它。但是列表是2,4,19,21,它读的是索引3。

代码语言:javascript
复制
[2, 4, 19, 21] sense
[2, 4, 19] sense

正如bereal所提到的,在迭代集合时,您应该避免修改它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57358366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档