成功尝试退出到下一个循环迭代

时间:2017-07-26 18:08:36

标签: python try-catch

如果在这里的其他地方得到回答,请道歉,但我找不到它。

我有一个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循环的当前迭代,如果没有,或者抛出异常,则继续相同的迭代。正如我的代码现在所做的那样,每次迭代都会将多个值附加到list1list2。我尝试了continuebreak,但continue似乎要么退出if语句,要么退回到try块,break退出整个for-loop

我也试过嵌套try-catch语句,但这似乎变得非常混乱和重复。

2 个答案:

答案 0 :(得分:2)

我不完全理解你的问题,但听起来你可能误解了continuebreak。一旦你了解它们是如何工作的,它们就很简单,我希望在这个解释之后你能够用它们来实现你的目标。

继续

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没有退出循环。

所以鸡蛋在我脸上。感谢您的帮助,伙计们。