创建一个能够识别现有代码中无限循环的函数

时间:2013-12-23 00:49:19

标签: python infinite-loop halting-problem

我正在尝试创建一个函数来识别python文件中的代码是否会通过无限循环。这就是我到目前为止所做的:

def reader(filename):
    myfile = open(filename)
    counter = 0 
    #counters the number of lines in the file
    for line in myfile:
        counter +=1
        print line
    #print number of lines in file    
    print counter

    #execute the code in file        
    execution = execfile(filename)

我要做的是执行文件,并尝试计算执行的行数,并将其与前一个计数器中的任何数字进行比较。例如,如果计数器> lines_exected,然后返回True,代码中有一个无限循环。这会有用吗?或者我还需要尝试别的吗?

2 个答案:

答案 0 :(得分:8)

这是不可能的。阅读halting problem

另外,即使理论上可行,或者即使你只是想做某种启发式猜测,你显然也不能只运行文件。如果程序有一个无限循环,你将运行无限循环并陷入其中,所以你永远不会有机会检查你的计数器。

答案 1 :(得分:0)

在一般情况下,this simply cannot be done。您可能能够识别某些显然是无限循环的简单情况(while True:),并且有静态分析工具可以这样做,但一般情况下无法完成您要做的事情。< / p>