Python 为什么try finally有效,而不是try else finally?
我发现Python向我抛出了一个语法错误,因为我尝试了Python 为什么try finally有效,而不是try else finally?,python,syntax,exception-handling,Python,Syntax,Exception Handling,我发现Python向我抛出了一个语法错误,因为我尝试了try而没有,除了: try: spam() else: eggs() finally: semprini() 相反,我被迫写下: try: spam() except: raise else: eggs() finally: semprini() 这感觉有点傻,但我希望在semprini()之前执行eggs()——如果我将else:-子句的内容放在最后:-子句之后,它将在sempr
try
而没有,除了:
try:
spam()
else:
eggs()
finally:
semprini()
相反,我被迫写下:
try:
spam()
except:
raise
else:
eggs()
finally:
semprini()
这感觉有点傻,但我希望在semprini()
之前执行eggs()
——如果我将else:
-子句的内容放在最后:
-子句之后,它将在semprini()
之后执行。虽然过去有过一次,但语义不同,因为这里的含义是,除了:pass
,即与我所追求的相反。有趣的是,尝试:
而不使用除外:
或其他:
,但如果我没有除外:
,我就不能使用其他:
。虽然可能有不同的方法来表达相同的观点,但我想到的替代方案(可能)有着微妙的不同行为
为什么出现else:
需要出现除了:
?你应该写
try:
spam()
eggs()
finally:
semprini()
如果没有除
子句之外的任何子句,else
是无用的。这是完全相同的吗?@gerrit:try
语句中的try
子句和else
子句之间的唯一区别是除
子句是否适用于它们。除了
子句,你没有任何。尝试:
没有除了:
必须有一个最后:
@TemporalWolf我可以从语法中看出这一点,但我想知道为什么。我假设是因为:你必须指定某个东西(即使那东西什么都不是)如果您告诉python,您认为这可能会引发异常。@TemporalWolf,不管怎样,SyntaxError
并不是因为finally:
缺失,而是因为except:
缺失。else
在这个上下文中的意思是类似的,如果不是except
,因此,除了
子句之外,没有任何子句是没有意义的