奇怪的函数行为python
我有一个名为“PERFORMANCE”的文本文件,其中包括测试列表及其运行时间。例如:奇怪的函数行为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
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