是否可以通过一次迭代检测多个python语法错误?
Python文件,包含2个语法错误 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文件的所有语法错误?(不仅是第一个)
谢谢!
答案 0 :(得分:1)
不,你不能,因为在一次语法错误之后,代码结构的其余部分不再可恢复。
以缺少的括号为例;是一个缺少的括号,还是一个逗号?函数是否在下一行调用表达式的部分错误,是否?如果缺少逗号,则下一行可能缺少括号。如果缺少括号,则下一行可能会有一个括号太多。这是两个非常不同的语法错误依赖以前的语法错误。
一个地方的语法错误使代码的其余部分无效,继续解析没有意义,至少不需要生成有效字节码的Python。
您可以使用Python linter;许多可以与您选择的文本编辑器集成。 Python IDE或linter不必生成字节码,并且可以更灵活地处理语法错误(继续检查后续行),并且可以告诉您其他问题,例如丢失或未使用的导入和变量。
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试pyflakes:
sudo pip install pyflakes
我的test.py只是:
a
a
pychecker test.py输出:
test.py:1: undefined name 'a'
test.py:2: undefined name 'a'
我不保证这是完美的。它可能会像C / C ++那样陷入困境并继续抛出错误的错误,但任何工具都是如此。
答案 3 :(得分:0)
考虑
'+func(1,2
可能只有一种语法错误:
'+func(1,2'
或者可能有2个语法错误:一个parethesis和一个引号:
''+func(1,2)
由于有很多方法可以修复SyntaxErrors,因此没有规范方法可以识别所有语法错误。