如何在Python中捕獲SyntaxError異常?


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

捕獲SyntaxError異常

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

示例

在下面的示例程式碼中,**eval()** 將引發 **SyntaxError**,因為“讓我們學習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+ 瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告