如何在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')
广告