简单的Python函数调用与包装在cProfile.run()中的区别

4 投票
1 回答
1040 浏览
提问于 2025-04-16 02:37

我有一个比较简单的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() )

撰写回答