timeit在Python中抛出keyerror

时间:2013-02-03 03:37:16

标签: python timeit

我正在尝试使用timeit计算一个简单的Python方法,但我一直收到以下错误

File "<timeit-src>", line 6, in inner
KeyError: 'tree'

代码,如下所示,创建一个'tree'对象,然后我尝试在Timer对象中传递该对象。我想这就是问题所在。

请注意,如果我将binarytree.mkthing(0,10)传递给Timer,则代码可以正常工作。然而这样做每次都会调用mkthing。我想只调用一次,然后重复使用它。

我应该怎么做呢?

if __name__=="__main__":

    tree = mkthing(0,10)

    t1=timeit.Timer("binarytree.traverse_asc(locals()['tree'],binarytree.printout)","import binarytree")
    print t1.repeat(2, 3)

2 个答案:

答案 0 :(得分:1)

你可以在设置代码中执行:from __main__ import tree

t1 = timeit.Timer("binarytree.traverse_asc(tree,binarytree.printout)",
                  setup = "import binarytree; from __main__ import tree")

或者更好的是,将事物(tree)的制作一起移动到设置代码中:

t1 = timeit.Timer("binarytree.traverse_asc(tree,binarytree.printout)",
                  setup = "import binarytree; tree = mkthing(0,10)")

答案 1 :(得分:0)

timeit.Timer会在timeit模块中删除您传递的语句。它无法访问树变量。

question有点相关,应该可以帮助你获得要点。