2010-11-15 7 views
7

Soy nuevo en ipython y estoy tratando de usar ipython para depurar mi código. Hice:acceder a variables en la sesión de depuración con ipython y% pdb en

[1]: %pdb 
Automatic pdb calling has been turned ON 

y luego

In [2]: %run mycode.py 

y en el código, que tienen 1/0 por lo que plantea una excepción y se pasa automáticamente a la sesión de depuración.

ZeroDivisionError: float division 

ipdb> variable 
array([ 0.00704313, -1.34700666, -2.81474391]) 

Entonces puedo acceder a las variables. Pero cuando hago lo siguiente:

ipdb> b = variable 
*** The specified object '= variable' is not a function or was not found along sys.path. 

Pero esto funciona:

ipdb> b = self.X 

Respuesta

9

b se utiliza para establecer puntos de ruptura. Por lo tanto, lo que sigue a b se espera que sea una función o número de línea.

Si escribe ipdb> help verá la lista completa de comandos (palabras reservadas).

Se puede usar, por ejemplo, x o y como una variable:

ipdb> y = variable 

o

ipdb> exec 'b = variable' 
+0

¿Hay alguna manera de sobrecargar este comando b? En mi aplicación, el nombre de la variable b aparece mucho naturalmente, y es un dolor no poder usarlo. – joon

+0

@joon: Tener nombres de variables de una letra generalmente no es una buena práctica de programación. Tal vez este es un problema que debería motivarte a cambiar el nombre de la variable. Me doy cuenta de que puede ser difícil de hacer. En ese caso, puede probar 'exec 'b = variable''. – unutbu

+2

Por supuesto. Es solo que el carácter b es la elección natural para la contraparte matemática. ¡Gracias! – joon

0

puede utilizar

locals()["b"] = variable 
1

creo que es necesario utilizar '! ' (pdb documentation): ! instrucción Ejecute la instrucción (una línea) en el contexto del marco de pila actual. El signo de exclamación se puede omitir a menos que la primera palabra de la instrucción se asemeje a un comando de depuración. Para establecer una variable global, se puede prefijar el orden de asignación con una declaración global sobre la misma línea, por ejemplo .:

global list_options; list_options = ['-l'] 
Cuestiones relacionadas