Domanda

Mi manca qualcosa di molto semplice.

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 eseguo il codice sopra in IPython, ottengo:

NameError: name 'c' is not defined

Cosa mi sto perdendo?

AGGIORNAMENTO l'esatta incolla della mia sessione è qui: http://pastebin.com/f3e1b9946

AGGIORNAMENTO Non ho detto che il problema si verifica in IPython, che (a quanto pare) è la fonte del problema

È stato utile?

Soluzione

All'interno di IPython, puoi utilizzare % potatura funzione magica :

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}

Altri suggerimenti

Non è il problema del poster originale, ma puoi anche ottenere lo stesso errore se stai invocando cProfile.run () in qualcosa di diverso dallo spazio dei nomi __main__ (dall'interno di una funzione o di un'importazione). In tal caso è necessario utilizzare il seguente metodo anziché il metodo run ():

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

Complimenti a questo post per avermi aiutato a capirlo.

Sebbene IPython sia molto utile, ci sono molti rari casi in cui interrompe il codice di lavoro o maschera errori. Quindi è utile provare il codice nell'interprete standard quando si ottengono tali errori mistici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top