2012-06-05 6 views
11

PDB (y otros depuradores de Python) tienen una forma simple de ver el valor de cualquier variable actual, simplemente escribiéndola. Sin embargo, a veces trabajo con bibliotecas que no almacenan sus valores devueltos en variables intermedias.¿Cómo ves el valor de retorno de una función en el depurador de Python, sin un intermedio?

He aquí un ejemplo de función:

def do_stuff(*args, **kwds): 
    return f(*args, **kwds) 

Después vuelvo de f, ¿cómo veo el valor de retorno? Podría reescribir bibliotecas después de descargarlos en tener un intermedio:

def do_stuff(*args, **kwds): 
    r = f(*args, **kwds) 
    return r 

pero parece que no debe haber una mejor manera.

+2

En su forma actual, el valor de retorno de 'F' se también será el valor de retorno de 'do_stuff'. Podrías mirar eso, o cambiarlo a algo como 'r = f (...); imprimir (r); return r' - Siento que tu pregunta es más compleja que eso, sin embargo. ¿Podrías aclarar? – jedwards

+0

Esa es en realidad la pregunta principal; ¿Hay alguna manera de ver ese valor sin un intermediario? – Chris

+1

Para tener esta función en PyCharm, vote por https://youtrack.jetbrains.com/issue/PY-13540 –

Respuesta

9

Usted puede mirar en un oculto __return__ variable local.

Si olvido su nombre exacta, exploro por:

(Pdb) sorted(locals().keys()) 
['__return__', 'xyz', ...] 

EDITAR: Mi relacionados más adelante responder con example for __return__

+0

Cool, gracias!Tendré que ver si eso funciona en Eclipse, pero creo que usa PDB por defecto ... – Chris

+1

Encontré también un comando pdb 'retval', pero creo que" __return__ "es más universal y más útil si el valor de retorno es un objeto complicado que no se puede imprimir en detalle. – hynekcer

1

¿Puede explicar más?

  • ¿Por depurador, quiere decir que está utilizando un registrador? ¿Estás avanzando con un IDE?
  • ¿Qué quiere decir con "ver el valor de retorno"? Si lo que desea es imprimirlo ...

    def do_stuff(*args, **kwds): 
        result = f(*args, **kwds) 
        print result 
        return result 
    
+0

Estoy usando Eclipse, y ese tipo de código intermedio es lo que me gustaría evitar si es posible. ¡Gracias! – Chris

4

En el AP, cuando la función devuelve se le añade una ->'value' al final de la línea con la representación del valor devuelto.

Por ejemplo:

(Pdb) s 
--Return-- 
> test.py(12)do_stuff()->'f' 
-> return result 
(Pdb) q 

significa do_stuff() regresaron 'f'

+0

Si entiendo este derecho, un paso justo antes de la devolución mostrará el valor de retorno, ¿verdad? ¿Funciona esto en la implementación de Eclipse? – Chris

+0

No, en realidad sucede cuando la función regresa. No estoy seguro acerca de la implementación de Eclipse, debería usar pdb (el depurador encontrado en la biblioteca estándar) – KurzedMetal

+0

Esto no siempre es útil, particularmente cuando el valor de retorno es largo o un objeto. – Kevin

Cuestiones relacionadas