如果在这里的其他地方得到回答,请道歉,但我找不到它。
我有一个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-loop
我也试过嵌套try-catch语句,但这似乎变得非常混乱和重复。
答案 0 :(得分:2)
我不完全理解你的问题,但听起来你可能误解了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
答案 1 :(得分:0)
编写玩具示例的乐趣在于,有时您会弄清楚源代码有什么问题。事实证明我毕竟使用continue
,并且发生了什么,通过跳过迭代的其余部分,我没有正确地更新下游的所有内容以进行下一次迭代。因此认为continue
没有退出循环。
所以鸡蛋在我脸上。感谢您的帮助,伙计们。