以下代码引发语法错误:

>>> for i in range(10):
...     print i
...     try:
...        pass
...     finally:
...        continue
...     print i
...
  File "<stdin>", line 6
SyntaxError: 'continue' not supported inside 'finally' clause

为什么在continue子句中不允许使用finally语句?

附言另一方面,此其他代码则没有问题:
>>> for i in range(10):
...     print i
...     try:
...        pass
...     finally:
...        break
...
0

如果重要的话,我正在使用Python 2.6.6。

最佳答案

禁止在最后一个条款中使用continue,因为它的解释会出现问题。如果由于异常而执行了最后一条,您该怎么办?

for i in range(10):
    print i
    try:
       raise RuntimeError
    finally:
       continue        # if the loop continues, what would happen to the exception?
    print i

我们可能会决定该代码应执行的操作,也许会吞下异常。但是良好的语言设计则相反。如果代码使读者感到困惑,或者如果有一种更清晰的方式来表达预期的逻辑(也许使用try: ... except Exception: pass; continue),那么将其保留为SyntaxError有一些好处。

有趣的是,您可以将return放在最后一个子句中,它将吞并所有异常,包括KeyboardInterrupt,SystemExit和MemoryError。那可能也不是个好主意;-)

关于python - 为什么在Python的 `continue`子句中​​不允许 `finally`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8302293/

10-12 22:51