Pregunta

Me falta algo muy 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)')

Cuando ejecuto el código anterior en IPython, obtengo:

NameError: name 'c' is not defined

¿Qué me estoy perdiendo?

ACTUALIZACIÓN la pasta exacta de mi sesión está aquí: http://pastebin.com/f3e1b9946

ACTUALIZACIÓN No mencioné que el problema ocurre en IPython, que (resulta ser) es la fuente del problema

¿Fue útil?

Solución

Mientras está dentro de IPython, puede usar el % función mágica de poda :

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}

Otros consejos

No es el problema del póster original, pero también puede obtener este mismo error si invoca cProfile.run () en algo que no sea el espacio de nombres __main__ (desde una función o una importación). En ese caso, debe usar el siguiente método en lugar del método run ():

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

Felicitaciones a esta publicación por ayudarme a resolver esto.

Aunque IPython es muy útil, hay muchos casos raros cuando se rompe el código de trabajo o enmascara errores. Por lo tanto, es útil probar el código en el intérprete estándar cuando se producen errores tan místicos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top