如何从txt文件(包含代码)中读取行并确定其是否正确?

时间:2019-05-08 20:52:46

标签: python

文本文件包含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,因为缺少此“)”。

3 个答案:

答案 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语句,则此操作将无效。例如。如果您有一个函数deffor遍历多行,则必须一次全部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块。

一般来说,像execeval这样的函数被认为是危险和令人讨厌的(例如参见herehere),但我认为对于您而言,这是最简单的方法

答案 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()