如果这件事在别的地方被回答了,我很抱歉,但我找不到。
我有一个for
循环,它从OverPass数据库中查询一些点,然后根据返回情况为每个点分配一些值。由于所有点的返回在其标记中并不是一致的,所以我使用一系列try-catch
语句来评估标记是否存在、它的值是什么以及指定的值应该是什么。标签以字典形式出现,但没有统一的键集。
示例:
for lat, lon in zip(df['PosLat'], df['PosLon']):
...
...
if result.ways:
way = result.ways[0]
try:
if dict[key1] == value1:
#append values to lists
continue
elif dict[key1] == value2:
#append different values to lists
continue
else:
pass
except KeyError:
pass
try:
if dict[key2] == value1:
#append values to lists
continue
elif dict[key2] == value2:
#append different values to lists
continue
elif dict[key2] == value3:
#append still different values to lists
else:
pass
except KeyError:
pass
我想要做的是在try块成功完成时退出for循环的当前迭代,如果没有完成或抛出异常,则继续进行相同的迭代。正如我的代码现在所处的位置,在每次迭代时,多个值被附加到list1
和list2
。我尝试过continue
和break
,但是continue
似乎要么退出if-语句,要么返回try块,break
退出整个for-循环。
我也试着嵌套那些试图捕捉的语句,但这似乎变得非常混乱和重复。
发布于 2017-07-26 10:15:47
我不完全理解您的问题,但听起来您可能对continue
和break
有误解。一旦你了解了它们的工作原理,它们就很简单,我希望在解释完之后,你就能够用它们来实现你的目标了。
继续进行
continue
只需停止当前的迭代,然后进入下一个迭代的开始。
for i in range(10):
if i == 5:
continue
print(i)
0
1
2
3
4
6 # It skipped 5!
7
8
9
中断
break
将退出整个循环,因此之后不会发生其他迭代。
for i in range(10):
if i == 5:
break
print(i)
0
1
2
3
4
# The entire loop stopped at 5
发布于 2017-07-26 10:46:11
编造玩具例子的joy说,有时候你会发现你的源代码出了什么问题。结果我还是在使用continue
,所发生的是,通过跳过其余的迭代,我没有为下一次迭代正确地更新下游的所有内容。因此,continue
没有退出循环的想法。
所以鸡蛋在我脸上。谢谢你们的帮助,伙计们。
https://stackoverflow.com/questions/45334484
复制相似问题