文本文件包含Python代码。
我的任务是编写一个程序,检查它是否可以在python中运行。我不知道如何检查python中的行是否正确。
我可以从文本文件中读取行,但仍然不知道如何确定当前行是否可以运行而没有任何错误消息。如果可以运行,程序将打印True
,否则打印False
。
lst=[]
with open("be.txt","r") as be:
for line in be:
lst.append(line.strip("\n"))
例如:一行是:“ for i in range(8:
”
结果应该为False
,因为缺少此“)”。
答案 0 :(得分:0)
使用exec
并捕获异常。 exec
将尝试将该行作为Python代码执行。如果成功,则执行该行,并且会发生任何副作用(例如,创建新变量)。如果不是,则会引发异常,您可以跳过该异常并移至下一行。像这样:
lst=[]
with open("be.txt","r") as be:
for line in be:
try:
exec(line)
lst.append(line.strip("\n"))
except:
pass
请注意,如果一行不是完整的Python语句,则此操作将无效。例如。如果您有一个函数def
或for
遍历多行,则必须一次全部exec
才能成功。
答案 1 :(得分:0)
您可以使用exec:
with open("be.txt","r") as be:
source = be.read()
try:
exec(source)
print("True")
except Exception as e:
print(e) #this add some info on where the error occurred
print("False")
首先创建一个单个字符串source
,其中包含文件中的所有代码。
然后在try
except
块中使用exec
来检查其是否运行。如果它在任何地方失败,将引发异常,并执行except
块。
一般来说,像exec
或eval
这样的函数被认为是危险和令人讨厌的(例如参见here或here),但我认为对于您而言,这是最简单的方法
答案 2 :(得分:0)
知道代码是否将在python中运行而没有任何错误消息的唯一方法是执行它。以下将做到这一点。当然,如果程序正确并产生输出,则需要花更多的时间来抑制任何输出。
def runner():
with open("be.txt","r") as f:
code = f.read()
try:
exec(code)
except Exception as e:
print("False")
else:
print("True")
runner()