如标题中所述。。我正在使用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内置模块,它可以用于进一步的代码分析。
parser和ast使用不同的解析方法。其中一个区别(也许不是关键)是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)
附加链接
完整语法规范