2017-07-25 54 views
2

我發現Python的我扔一個SyntaxError的努力tryexcept爲什麼try-finally有效,但不能try-else-finally?

try: 
    spam() 
else: 
    eggs() 
finally: 
    semprini() 

相反,我被迫寫:

try: 
    spam() 
except: 
    raise 
else: 
    eggs() 
finally: 
    semprini() 

這感覺略帶傻氣,但我想eggs()被執行之前semprini() - 如果我把else:條款的內容 - finally: - 條款之後它將在之後執行 semprini()。儘管過去有一個try without except proposal,但語義不同,因爲它的含義是except: pass,即與我所處的極端相反。有趣的是,try:沒有except:else:is valid,但我不能有else:如果我也不except:。雖然可能有不同的方式來制定相同的方案,但我認爲(可能)的備選方案具有細微差別的行爲。

爲什麼else:的存在要求存在except:

+0

'try:'without'except:'* must * have a'finally:' – TemporalWolf

+0

@TemporalWolf我可以從語法中看到這一點,但我不知道爲什麼。 – gerrit

+0

我假設是因爲[顯式比隱含更好](https://www.python.org/dev/peps/pep-0020/):如果你告訴Python你認爲你必須指定某些東西(即使這些東西沒有)這可能會引發異常。 – TemporalWolf

回答

3

你應該寫

try: 
    spam() 
    eggs() 
finally: 
    semprini() 

在沒有任何except條款,else是沒用的。

+0

這是完全相同的嗎? – gerrit

+1

@gerrit:'try'語句的'try'和'else'子句之間的唯一區別是'except'子句是否適用於它們。你沒有任何'except'子句。 – user2357112

相關問題