无法使 cProfile 在 IPython 中工作
我缺少一些非常基本的东西。
class C:
def __init__(self):
self.N = 100
pass
def f(self, param):
print 'C.f -- param'
for k in xrange(param):
for i in xrange(self.N):
for j in xrange(self.N):
a = float(i)/(1+float(j)) + float(i/self.N) ** float(j/self.N)
import cProfile
c = C()
cProfile.run('c.f(3)')
当我在 IPython 中运行上述代码时,我得到:
NameError: name 'c' is not defined
我缺少什么?
更新我的会话的确切粘贴在这里:http://pastebin.com/f3e1b9946
更新 我没有提到问题发生在 IPython 中,(事实证明)这是问题的根源
I'm missing something very basic.
class C:
def __init__(self):
self.N = 100
pass
def f(self, param):
print 'C.f -- param'
for k in xrange(param):
for i in xrange(self.N):
for j in xrange(self.N):
a = float(i)/(1+float(j)) + float(i/self.N) ** float(j/self.N)
import cProfile
c = C()
cProfile.run('c.f(3)')
When I run the above code in IPython, I get:
NameError: name 'c' is not defined
What am I missing?
UPDATE the exact paste of my session is here: http://pastebin.com/f3e1b9946
UPDATE I didn't mention that the problem occurs in IPython, which (at it turns out) is the source of the problem
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 IPython 中,您可以使用 %prun 魔法功能:
While inside IPython, you can use the %prun magic function:
这不是原始海报的问题,但如果您在 __main__ 命名空间之外的其他地方(从函数或导入中)调用 cProfile.run() ,您也可能会遇到同样的错误。在这种情况下,您需要使用以下方法而不是 run() 方法:
Not the original poster's problem, but you can also get this same error if you are invoking cProfile.run() in something other than the __main__ namespace (from within a function or an import). In that case you need to use the following instead of the run() method:
尽管 IPython 非常方便,但在很多罕见的情况下,它会破坏工作代码或掩盖错误。因此,当遇到此类神秘错误时,在标准解释器中尝试代码会很有用。
Although IPython is very handy, there is a lot of rare cases when it breaks working code or masks errors. So it's useful to try code in standard interpreter when you get such mystical errors.