以下代码引发语法错误:
>>> 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/