Pergunta

que estou perdendo algo muito básico.

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)')

Quando eu executar o código acima em IPython, eu recebo:

NameError: name 'c' is not defined

O que eu estou ausente?

Atualizar exatamente o colar da minha sessão está aqui: http://pastebin.com/f3e1b9946

Atualizar eu não mencionar que o problema ocorre em IPython, que (ao que parece) é a origem do problema

Foi útil?

Solução

Enquanto dentro IPython, você pode usar o % prun função mágica :

In [9]: %prun c.f(3)
C.f -- param
         3 function calls in 0.066 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.066    0.066    0.066    0.066 <string>:6(f)
        1    0.000    0.000    0.066    0.066 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Outras dicas

Não o problema do cartaz original, mas você também pode obter este mesmo erro se você está invocando cProfile.run () em algo diferente do __main__ namespace (de dentro de uma função ou uma importação). Nesse caso, você precisará usar o seguinte em vez do método run ():

cProfile.runctx("your code", globals(), locals())

Kudos para este pós por me ajudar a descobrir isso.

Embora IPython é muito útil, há um monte de casos raros quando ele quebra trabalho de código ou máscaras erros. Portanto, é útil tentar código no interpretador padrão quando você se tais erros místicas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top