奇怪的函数行为python

奇怪的函数行为python,python,Python,我有一个名为“PERFORMANCE”的文本文件,其中包括测试列表及其运行时间。例如: 274x_reinput_raw_data run 9 sec B-03507_add_pad_stack_with_rotation.csh run 8 sec B-04869_board_copper.csh run 1 sec 我想创建一个函数名“GetRunning time”,返回给定测试的运行时间。 我创建了这个函数: def get_running_time(test): runnin

我有一个名为“PERFORMANCE”的文本文件,其中包括测试列表及其运行时间。例如:

274x_reinput_raw_data run 9 sec
B-03507_add_pad_stack_with_rotation.csh run 8 sec
B-04869_board_copper.csh run 1 sec
我想创建一个函数名“GetRunning time”,返回给定测试的运行时间。 我创建了这个函数:

def get_running_time(test):
    running_time = 0
    line = PERFORMANCE_FILE.readline()
    while line != "":
        line_split = line.split()
        if test in line_split:
            running_time = line_split[-2]
        else:
            line = PERFORMANCE_FILE.readline()
    return running_time
但当我打电话时:

 for test in failed_tests:
     file.write(str(get_running_time(test))+",")
它不写任何东西。 在中间使用打印,我看到函数取一个测试名称,搜索它,但不继续进行下一个测试。 我不知道我的错误在哪里。我尝试了许多不同的方法,但都没有成功。我很想得到一些帮助。 谢谢

编辑- 我已使用打印显示了一个示例:

def get_running_time(test):
    print(test)
    running_time = 0
    line = PERFORMANCE_FILE.readline()
    print(line)
    while line != "":
        line_split = line.split()
        print(line_split)
        if test in line_split:
            running_time = line_split[-2]
            print(running_time)
        else:
            line = PERFORMANCE_FILE.readline()
            print(line)
    return running_time
控制台中的输出为:

DrillCleanup_unit_test.csh
274x_reinput_raw_data run 9 sec

['274x_reinput_raw_data', 'run', '9', 'sec']
B-03507_add_pad_stack_with_rotation.csh run 8 sec

['B-03507_add_pad_stack_with_rotation.csh', 'run', '8', 'sec']
B-04869_board_copper.csh run 1 sec

['B-04869_board_copper.csh', 'run', '1', 'sec']
B-04877_selftest_slot_histogram.csh run 0 sec

['B-04877_selftest_slot_histogram.csh', 'run', '0', 'sec']
B-06589_clipAreaRegressionTest run 8 sec


Nomenclature_unit_test.csh

PlaneClearance_unit_test.csh

SurfaceAnalyzer_unit_test.csh

274x_reinput_raw_data

B-03507_add_pad_stack_with_rotation.csh


Process finished with exit code 0
将挂起,因为这是永远的循环。需要中断循环或读取新行

可能会这样做:

while line != "":
    if test in line_split:
        running_time = line_split[-2]
    line = PERFORMANCE_FILE.readline()

搜索文件中特定行的惯用方法不是您的
while…if…else
,它可能会产生一个无休止的循环,而是一个
用于…if…break
构造中的行。您应该在每次调用时重新打开该文件,或者至少将其倒带,或者将
PERFORMANCE\u file
列成一行,以便能够多次扫描该文件

def get_running_time(test):
    for line in PERFORMANCE_FILE:
        line_split = line.split()
        if test in line_split:
            return line_split[-2]
    return 0

为什么
whileline!=“”:
?如果测试在第_行分割中,那么
中的测试是什么?
测试
的值是什么?
获取运行时间
不能返回
此缩进请发布一个.line=“”表示我已到达文件末尾。test是测试名称,因此如果它在行中,则意味着找到了我要从中获取运行时间的行。我没有无限循环,因为在某个点上,我到达文件的末尾。如果在行中找到test,您将有无限循环。若测试是在行_split中,那个么它总是正确的。此循环中未更改此数据。@Adamso如果在
line\u split
中找到
test
时没有无限循环,则您发布的代码不是您执行的代码,句号。性能仍然很糟糕。多项式,它可以是线性的。@GeoffLentsch是的,一个人可以只构建一个映射,映射为
test\u name:running\u time
一次,但首先要让它工作,然后如果需要的话,让它快速工作
def get_running_time(test):
    for line in PERFORMANCE_FILE:
        line_split = line.split()
        if test in line_split:
            return line_split[-2]
    return 0