【问题标题】:Python: Using continue in a try-finally statement in a loopPython:在循环中的 try-finally 语句中使用 continue
【发布时间】:2012-05-19 16:05:41
【问题描述】:

请问以下代码:

while True:
    try:
        print("waiting for 10 seconds...")
        continue
        print("never show this")
    finally:
        time.sleep(10)

总是打印消息“等待 10 秒...”,休眠 10 秒,然后再做一次?换句话说,即使循环是continue-ed,finally 子句中的语句也会运行吗?

【问题讨论】:

  • @AndrewG.,提出这个问题的目的是为了更容易找到这些信息。我花了几分钟才想出这个例子。 :)

标签: python continue try-finally


【解决方案1】:

来自python docs

当在 try...finally 语句的 try 套件中执行 return、break 或 continue 语句时,finally 子句也会在“退出时”执行。 continue 语句在 finally 子句中是非法的。 (原因是当前实现存在问题——未来可能会取消此限制)。

【讨论】:

【解决方案2】:

文档使用了稍微不清楚的语言(“在路上”)来解释这种情况是如何发生的。如果在异常子句中执行 continue 语句,则 finally 子句中的代码将被执行,然后循环将继续进行下一次迭代。

这里有一个非常清晰的例子来演示这种行为。

代码:

i=0
while i<5:
    try:
        assert(i!=3) #Raises an AssertionError if i==3
        print("i={0}".format(i))
    except:
        continue
    finally:
        i+= 1; #Increment i

'''
Output:

i=0
i=1
i=2
i=4
'''

【讨论】:

  • 原始文档中有哪些不清楚的地方?
【解决方案3】:

现在从最新版本的python(3.8.4)开始,'continue'可以在'finally'块中使用。enter image description here

【讨论】:

  • 欢迎来到stackoverflow。最好将代码发布为文本,而不是图像。然后其他人可以复制/粘贴来尝试。突出显示代码并按 Ctrl+k 或突出显示并单击答案框中的“{}”符号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多