简单的Python函数调用与包装在cProfile.run()中的区别
我有一个比较简单的Python脚本,其中有一个函数调用,像这样:
f(var, other_var)
也就是说,这是一个需要几个参数的函数。所有这些参数在函数f内部都可以访问,并且都有值。
但是,当我改为调用:
cProfile.run('f(var, other_var)')
时,它却出现了错误信息:
NameError: "name 'var' is not defined"
我用的Python版本是:
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
这是怎么回事呢?
1 个回答
10
这是因为 cProfile 尝试执行你传入的代码字符串,但失败了,因为在那段代码里并没有定义 var
!它使用的是调用 run()
时的变量,但因为你没有告诉 cProfile 这些变量的存在,所以它不知道该用哪些。你可以使用 runctx
,因为它允许你传入本地和全局的变量字典,这样执行的代码就能用到这些变量了:
cProfile.runctx( "...", globals(), locals() )