timeit函数中的缩进错误



我想测量代码的一部分的处理时间,为此我使用了timeit函数。然而,它从timeit函数内部返回IndentationError。

这是我的密码;


for stem, result in zip(stem_dirs, result_dirs):
code_to_measure = '''
print(stem, 'n', result)
subprocess.call(['python', './a.py', "--dir_in", stem, "--dir_out", result])
'''
proccess_time = timeit.timeit(code_to_measure)
print(proccess_time)

这是我得到的错误;

Traceback (most recent call last):
File "code_test.py", line 115, in <module>
proccess_time = timeit.timeit(code_to_measure)
File "/usr/local/lib/python3.6/timeit.py", line 233, in timeit
return Timer(stmt, setup, timer, globals).timeit(number)
File "/usr/local/lib/python3.6/timeit.py", line 123, in __init__
compile(stmtprefix + stmt, dummy_src_name, "exec")
File "<timeit-src>", line 3
print(stem, '
^
IndentationError: unexpected indent


但是,下面代码中的timeit函数仍然可以正常运行;


# importing the required module 
import timeit 
# code snippet to be executed only once 
mysetup = "from math import sqrt"
# code snippet whose execution time is to be measured 
mycode = ''' 
def example(): 
mylist = [] 
for x in range(100): 
mylist.append(sqrt(x)) 
'''
# timeit statement 
print(timeit.timeit(setup = mysetup, 
stmt = mycode, 
number = 10000)) 

这是代码的输出;

0.002189640999858966

我不太确定如何解决这个问题。如果你对这个问题有任何建议或解决方案,请告诉我。

事先非常感谢。

回复有点晚,但我遇到了同样的问题。

在timeit调用中,不可能简单地使用带有换行符的三引号字符串。如果要在语句字符串中包含多个语句,可以使用;将它们分隔开。

对于你的代码,它看起来像这样:

for stem, result in zip(stem_dirs, result_dirs):
code_to_measure = f"print({stem}, 'n', {result});subprocess.call(['python', './a.py', '--dir_in', stem, '--dir_out', {result}])"
proccess_time = timeit.timeit(code_to_measure)
print(proccess_time)

(由于时间在空环境中运行,因此也通过格式字符串添加变量(

下面的timeit调用之所以运行,是因为它实际上并没有执行函数中的语句。它所做的只是创建函数,这也解释了为什么它的速度如此之快。

执行缩进的两种方法是要么使用空格(标准规范是一级缩进使用4个空格(,要么使用制表符。确保你没有把它们混合在一起。坚持其中一个。

如果你能以.py文件的形式与我分享你的代码,我可能会告诉你问题出在哪里,从而为你提供更多帮助。

相关内容

  • 没有找到相关文章

最新更新