如何在Python中捕獲SyntaxError異常?


當解析器遇到無法理解的原始碼時,就會發生SyntaxError。這可能發生在匯入模組、呼叫exec或呼叫eval()時。異常的屬性可用於精確查詢導致異常的輸入文字的哪一部分。

捕獲SyntaxError異常

為了找出導致語法錯誤的程式碼部分,我們需要使用異常的某些屬性來檢查作為輸入給出的文字的哪一部分導致了異常。

示例

在下面的示例程式碼中,**eval()** 將引發 **SyntaxError**,因為“Let's learn Python”不是有效的 Python 語法。

try:
    eval('Lets learn Python')  
except SyntaxError as err:  
    print('Syntax error in file {} on line {} at column {}: {}'.format(
        err.filename, err.lineno, err.offset, err.text.strip()))
    print(err)

輸出

Syntax error in file <string> on line 1 at column 6: Lets learn Python
invalid syntax (<string>, line 1)

匯入模組期間的SyntaxError

嘗試匯入名稱無效的模組時,會引發**SyntaxError**,並列印詳細資訊。

示例

在這個例子中,程式碼**invalid_module_name**在嘗試匯入名稱無效的模組時會引發**ImportError**而不是**SyntaxError**。

try:
    import invalid_module_name 
except ImportError as err:
    print(f"Import error: {err}")

輸出

Import error: No module named 'invalid_module_name'

使用'exec()'執行不正確的程式碼

**exec()** 函式可以動態執行 Python 程式的程式碼。程式碼可以作為字串或物件程式碼傳遞給此函式。

示例

在下面的示例程式碼中,**exec()** 函式嘗試執行字串,但缺少冒號導致 **SyntaxError**。

try:
    exec("if True print('Hello')") 
except SyntaxError as err:
    print(f"Syntax error in file {err.filename} on line {err.lineno} at column {err.offset}: {err.text.strip()}")

輸出

Syntax error  (1-7): if True print('Hello')

更新於:2024年10月9日

2K+ 次檢視

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.