Skip to main content
 首页 » 编程设计

Python 抽象语法 : Detect syntax error's'

2025年05月04日10bjzhanghao

是否可以一次迭代检测多个 python 语法错误?

有 2 个语法错误的 Python 文件 test.py:

print 'hello' 
test =- 
b = 1 + 1 
test =+ 
print 'world' 

这段代码只得到第 2 行的第一个语法错误,而不是第 4 行的错误:

import parser 
parser.suite(open('test.py').read()) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "<string>", line 2 
    test =- 

如何检测 *.py 文件的所有语法错误?(不仅是第一个)

谢谢!

请您参考如下方法:

不,你不能,因为在一个语法错误之后,其余的代码结构将无法再恢复。

以缺少括号为例;是缺少括号还是逗号?下一行的函数调用是否是表达式的一部分有错误?如果缺少逗号,则下一行可能缺少括号。如果缺少括号,则下一行的括号可能过多。这将是两个截然不同的语法错误,它们取决于前一个语法错误的真正含义。

一个地方的语法错误会使其余代码无效,继续解析是没有意义的,至少对于需要生成有效字节码的 Python 而言是这样。

您可以使用 Python linter ;许多可以与您选择的文本编辑器集成。 Python IDE 或 linter 不必生成字节码,并且可以更灵活地处理语法错误(继续检查后续行),并且还可以告诉您其他问题,例如丢失或未使用的导入和变量。