奇怪的功能行为蟒蛇

时间:2018-07-24 11:27:16

标签: 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

我想创建一个函数名称“ get running 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

2 个答案:

答案 0 :(得分:1)

在文件中搜索特定行的惯用方式不是您的while...if...else,它可能会产生无限循环,而是一个for line in...if...break构造。而且,您应该在每次通话时重新打开文件,或者至少倒带它,或者将PERFORMANCE_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

答案 1 :(得分:0)

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

会挂起,因为这是永远的循环。需要中断循环或读取新行;

可能会执行以下操作:

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