2

是否可以通过一次迭代检测多个 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 文件的所有语法错误?(不仅是第一个)

谢谢!

4

4 回答 4

1

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

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

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

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

于 2013-08-22T20:04:52.487 回答
0

考虑

'+func(1,2

可能只有一个语法错误:

'+func(1,2'

或者可能有 2 个语法错误:括号和引号:

''+func(1,2)

由于修复 SyntaxErrors 的方法有很多,因此没有规范的方法来识别所有 SyntaxErrors。

于 2013-08-22T20:18:25.100 回答
0

您可能会遇到通过 pylint 或 pychecker 运行标记的几个问题,纠正其中 任何一个可能会对以后的问题产生很大影响 -顺便说一句,强烈建议定期在您的代码上运行一个或两个。

于 2013-08-22T20:15:13.810 回答
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++ 那样搞砸并不断抛出错误错误,但任何工具都是如此。

于 2013-08-22T20:16:28.520 回答