2010-08-11 3 views
3

У меня довольно простой сценарий Python, который содержит вызов функции, какразница между простым вызовом функции Python и окружив его cProfile.run()

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 

Что здесь происходит?

ответ

9

Это связано с тем, что cProfile пытается выполнить код, переданный им как строку, и не удается, потому что, ну, var не определен в этом фрагменте кода! Он использует переменные в области вызова для run(), но так как вы не сказали cProfile о них, он не знает, как их использовать. Используйте runctx вместо этого, так как она позволяет передавать в локальных и глобальных словарях использовать для кода exec изда:

cProfile.runctx("...", globals(), locals()) 
+0

Я использовал профайлер так много раз, но никогда не в ситуации, которая бы разоблачить этот вопрос. .. благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^