2017-07-19 28 views
0

我是新來的Python和我沒有困難與學習嘗試的一個例子,除了塊:蟒蛇 - 捕使用try未完成的字符串語法錯誤除了

try: 
    2 + "s" 
except TypeError: 
    print "There was a type error!" 

,輸出一個可以預料到的:

There was a type error! 

然而,試圖抓住一個語法錯誤,這樣的時候:

try: 
    print 'Hello 
except SyntaxError: 
    print "There was a syntax error!" 
finally: 
    print "Finally, this was printed" 

我會IR通常會得到EOL語法錯誤。我在jupyter筆記本環境中嘗試了幾次,只有當我轉移到VIM的終端時,我認爲編譯器將except和finally代碼塊解釋爲不完整字符串的其餘部分。

我的問題是如何去處理這種格式的語法錯誤處理?或者是否有更有效的(pythonic?)方法來解決這個問題?

這可能不是真正遇到的問題,但知道是否有一個清晰的解決方法會很有趣。

謝謝!

+0

僅執行行之後缺少一個右引號:print'你好 –

+6

你不能;這樣的語法錯誤在解析期間引發,而不是執行。解析器甚至沒有發現* except * except語句,因爲它仍然是它正在解析的字符串的一部分。您會收到EOL錯誤,因爲非三重引號的字符串必須在當前行結束之前關閉。 – chepner

+2

唯一可捕獲的'SyntaxError's是從語法上有效的'exec'語句中引出的,該語句的*參數*包含語法錯誤。 – chepner

回答

0

您不能使用try/except塊來捕獲SyntaxErrors的原因是這些錯誤發生在您的代碼執行之前。

Python代碼執行的高級步驟

  1. Python解釋平移Python代碼轉換成可執行指令。 (引發語法錯誤)
  2. 指令被執行。 (嘗試/ except塊執行)

因爲步驟1中的錯誤發生,你不能使用try /除了攔截他們,因爲在步驟2

-1

答案很簡單蛋糕:

SyntaxError勾銷了exceptfinally語句,因爲他們是一個字符串的內部。

+0

不,他們不在字符串內。 – chepner

+1

單引號字符串文字終止於行的末尾......所以它們不是字符串文字的一部分。答案是因爲這是由解析器而不是運行時引發的。您只能捕獲運行時異常。 – AChampion

+0

沒錯。對不起,我沒有真正理解上下文。 –