如何在新创建的python文件/模块中检查所有类型的错误



如标题中所述。。我正在使用python创建一个新的".py"文件。它包含我写入".py"文件的某些代码。现在,我想检查该文件中是否有任何语法错误、缩进错误等(简而言之,各种错误)。如何继续?

附言-我只想使用python,而不是任何IDE和扩展。附言-提前谢谢。

我试着在exists()函数中使用python的操作系统模块。它返回True。尝试使用python的"identify"库。

有不同的方法来进行这种检查。

python3.8提供了所有docs.python.org链接

使用compile函数

Thi is是进行此类检查的最短方法。

函数compile(source, filename, mode)将源代码(如*.py文件中所示)编译为代码对象(如*.pyc文件、function.__code__等)。

编译时,source中的任何命令都不会执行——编译是运行前阶段。但如果语法错误,就会引发相应的错误。

示例:

with open('code.py') as file:
s = file.read()
try:
compiled = compile(s, 'code.py', 'exec')
print('no errors found')
except BaseException as msg:
print(type(msg).__name__, msg)

compile()返回的代码可以传递到exec()以执行

使用parser.suite

这是为了防止你要更深入地分析你的来源。

函数parser.suite(source)解析源以准备进行分析。

此解析的源这些是等价物:

code_a = compile(s, 'file.py', 'exec')
code_b = parser.compilest(parser.suite(s))
print(code_a == code_b) # => True

修改后的检查示例:

import parser
with open('code.py') as file:
s = file.read()
try:
code = parser.suite(s)
print('no errors found')
except BaseException as msg:
print(type(msg).__name__, msg)

使用ast.parse函数

AbstractSyntaxTree(ast)是另一个用于源代码解析的python内置模块,它可以用于进一步的代码分析。

parserast使用不同的解析方法。其中一个区别(也许不是关键)是parser更像是python解释器,它可以查看python代码,而ast则更易于阅读。

这些是等价物:

code_a = compile(s, 'file.py', 'exec')
code_b = compile(ast.parse(s, filename='file.py'), 'file.py', 'exec')
print(code_a == code_b) # => True

修改后的检查示例:

import ast
with open('code.py') as file:
s = file.read()
try:
ast.parse(s, filename='file.py')
print('no errors found')
except BaseException as msg:
print(type(msg).__name__, msg)

附加链接

完整语法规范

最新更新