Python 为什么try finally有效,而不是try else finally?

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

我发现Python向我抛出了一个语法错误,因为我尝试了
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
,因此,除了
子句之外,没有任何
子句是没有意义的