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

Python 成功尝试后退出到下一个循环迭代,python,try-catch,Python,Try Catch,如果在这里的其他地方有人回答,我深表歉意,但我找不到 我有一个for循环,它从立交桥数据库中查询一些点,然后根据返回值为每个点分配一些值。因为返回值在所有点的标记中并不一致,所以我使用一系列try-catch语句来评估标记是否存在,它的值是什么,然后是分配的值应该是什么。标记以字典形式出现,但没有统一的键集 例如: for lat, lon in zip(df['PosLat'], df['PosLon']): ... ... if result.ways: way =

如果在这里的其他地方有人回答,我深表歉意,但我找不到

我有一个for循环,它从立交桥数据库中查询一些点,然后根据返回值为每个点分配一些值。因为返回值在所有点的标记中并不一致,所以我使用一系列
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循环


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

我不完全理解您的问题,但听起来您可能对
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

编写玩具示例的乐趣在于,有时您可以找出源代码的错误。事实证明,我毕竟是在使用
continue
,所发生的事情是,通过跳过迭代的其余部分,我没有为下一次迭代正确地更新下游的所有内容。因此,
continue
的思想并没有退出循环


所以鸡蛋在我脸上。感谢您的帮助,各位。

并不是说您的原始代码特别难读,但我相信,如果您创建了一个能够清晰、简洁地演示您的问题的解决方案,您将获得更多答案。现在,潜在的答案必须通读几行不相关的逻辑。您想退出哪个迭代?
keyrerror
不会由
append
语句引发。另外,“try语句的条件满足”到底是什么意思<代码>尝试块没有“条件”。你的意思是,如果try块成功完成并到达终点,你想从循环中中断吗?我正要在Jean-Françoisfare处提到这一点。我真的不明白为什么OP甚至有
try/except
块。@ChristianDean听起来他们根本不想使用
break
。如果密钥存在,OP想跳过迭代。@ChristianDean我不认为
break
是我想要的。这将过早地结束循环。我想从下一次迭代开始继续循环,我认为这是
continue
所做的,但它似乎在try-catch中不起作用。@AChampion实际上,在重新阅读问题后,我发现我的评论有点错误。我没有看到OP想要从当前迭代中断,而不是从整个循环中断。我同意,OP似乎对如何使用
continue
感到困惑。我想这在某种程度上回答了OP的问题,但我认为向OP展示如何在他的实际程序中正确使用
continue
,将是有益的。我接受这个答案,作为
break
continue
使用的一个信息示例。结果证明我做的是正确的,但是在终止循环的迭代时,下游的某些东西没有得到正确的更新,给人一种附加值的错误感觉。