¿Qué es un equivalente Python de var_dump() de PHP? [duplicate]

7 minutos de lectura

avatar de usuario
Zoredache

Al depurar en PHP, con frecuencia encuentro útil simplemente pegar un var_dump() en mi código para mostrarme qué es una variable, cuál es su valor y lo mismo para cualquier cosa que contenga.

¿Cuál es un buen equivalente de Python para esto?

  • Encontré esto buscando el equivalente de PHP para pythons repr. Gracias.

    – Danny Staple

    30 de abril de 2012 a las 15:47

  • la pregunta duplicada que menciona @hop (y la respuesta más votada) fue mucho más útil para mí

    – cwd

    24 de agosto de 2012 a las 18:46

  • Si usa mucho esta función, puede considerar usar un buen depurador remoto con puntos de interrupción. Puede que sea difícil de entender al principio, pero te ahorrará tiempo en el futuro y una vez que sepas cómo hacerlo, nunca volverás atrás. Sé que Eclipse tiene uno bueno y Komodo también. docs.activestate.com/komodo/8.0/…

    – Styks

    12 de marzo de 2014 a las 13:10

  • dado que este hilo está cerrado, vea esta respuesta que usa la serialización jsonpickle: stackoverflow.com/a/35804583/1081043

    – Wisbucky

    04/03/2016 a las 19:34

avatar de usuario
Ene

Creo que el mejor equivalente a PHP var_dump($foo, $bar) es combinar print con vars:

print vars(foo),vars(bar)

  • Lo mismo aquí, lo único que funcionó como esperaba (como var_dump)

    – Familiares

    18 de noviembre de 2011 a las 3:00

  • Parece que para que vars funcione, la variable debe tener una información de diccionario; de lo contrario, obtendrá “TypeError: vars() argumento debe tener __ dict __ atributo”.

    – ken

    3 de enero de 2013 a las 15:25


  • Esto lo hizo por mí, pero también me gusta el pprint. Aquí hay un híbrido: pprint.pprint(vars(foo)).

    – dsummersl

    24 de enero de 2013 a las 19:42


  • -1, esto funciona solo para algunos tipos de variables, no para todas. Considere en su lugar pprint o repr

    – Liberarse

    20 de mayo de 2013 a las 9:41

  • Nota: Para python3 necesitará usar paréntesis como print( vars(foo) )

    – Armstrongest

    3 de abril de 2019 a las 3:23

avatar de usuario
Martín contra Löwis

Para mostrar bien un valor, puede usar el pprint módulo. La forma más fácil de volcar todas las variables con él es hacer

from pprint import pprint

pprint(globals())
pprint(locals())

Si está ejecutando CGI, una función de depuración útil es la cgitb módulo, que muestra el valor de las variables locales como parte del rastreo.

  • ¿Qué hay de mostrar el tipo de var? como Nulo/Ninguno, Cadena, Objeto…

    – encinas

    25 de abril de 2012 a las 12:42

  • Qué pasa pprint() en enumerar objetos, permutacionesetc.?

    – JSmyth

    23 de noviembre de 2014 a las 16:33

  • Esto fue útil. Soy un novato de Python, pero lo que pareció ayudar a mi caso fue usar .__dict__p.ej pprint(object.__dict__).

    – Elías Lynn

    15 de noviembre de 2017 a las 17:08

  • object.__dict__ genera todas las propiedades del objeto

    – Ligemer

    21 de marzo de 2018 a las 23:32

  • var_dump en PHP no se trata solo de “mostrar bien un valor” 😁

    – Lluvia

    24 de enero de 2020 a las 17:51

avatar de usuario
Hai Phaikawl

lo mas parecido a PHP‘s var_dump() es pprint() con el getmembers() función en el incorporado inspect módulo:

from inspect import getmembers
from pprint import pprint
pprint(getmembers(yourObj))

  • Así es mucho más mejor de lo bueno.

    – Hola Soy Edu Feliz Navidad

    3 de febrero de 2021 a las 18:50

avatar de usuario
sha256

Escribí una alternativa muy liviana a var_dump de PHP para usar en Python y la hice de código abierto más tarde.

GitHub: https://github.com/sha256/python-var-dump

Simplemente puede instalarlo usando pip:

pip install var_dump

Ejemplo de uso:

from var_dump import var_dump

var_dump(1, {"testkey1": "testval1", "testkey2": "testval2".encode("ascii")},
 ["testval"], "test", "test".encode("ascii"), set([1,2,3]))

huellas dactilares

#0 int(1) 
#1 dict(2) 
    ['testkey1'] => str(8) "testval1"
    ['testkey2'] => object(bytes) (b'testval2')
#2 list(1)
    [0] => str(7) "testval"
#3 str(4) "test"
#4 object(bytes) (b'test')
#5 object(set) ({1, 2, 3})

avatar de usuario
Cody Casterline

PHP var_export() generalmente muestra una versión serializada del objeto que se puede ejecutar () para volver a crear el objeto. Lo más parecido a eso en Python es repr()

“Para muchos tipos, esta función intenta devolver una cadena que produciría un objeto con el mismo valor cuando se pasa a eval() […]”

  • Creo que estás pensando en var_export.

    –Paul Biggar

    21 de diciembre de 2009 a las 18:05

  • sí, var_export en php y repr en python están algo relacionados, es decir, si desea una representación de cadena oficial de algún objeto, use repr(). Para que no sea oficial (léase legible por humanos), siempre puede forzar la conversión a una cadena: str (objeto), que produce información similar a print_r () de php (usado mucho más a menudo para la depuración que var_dump).

    – Víctor Farazdagi

    29 de marzo de 2010 a las 17:43

  • Corrija la respuesta, es incorrecta. Como se mencionó, está hablando de var_export o describe var_dump() de manera diferente.

    – Marcos

    23/10/2010 a las 23:35


avatar de usuario
Comunidad

Así que tomé las respuestas de esta pregunta y otra pregunta y llegué a continuación. Sospecho que esto no es lo suficientemente pitónico para la mayoría de las personas, pero realmente quería algo que me permitiera obtener una representación profunda de los valores que tiene alguna variable desconocida. Agradecería cualquier sugerencia sobre cómo puedo mejorar esto o lograr el mismo comportamiento más fácilmente.

def dump(obj):
  '''return a printable representation of an object for debugging'''
  newobj=obj
  if '__dict__' in dir(obj):
    newobj=obj.__dict__
    if ' object at ' in str(obj) and not newobj.has_key('__type__'):
      newobj['__type__']=str(obj)
    for attr in newobj:
      newobj[attr]=dump(newobj[attr])
  return newobj

Aquí está el uso

class stdClass(object): pass
obj=stdClass()
obj.int=1
obj.tup=(1,2,3,4)
obj.dict={'a':1,'b':2, 'c':3, 'more':{'z':26,'y':25}}
obj.list=[1,2,3,'a','b','c',[1,2,3,4]]
obj.subObj=stdClass()
obj.subObj.value="foobar"

from pprint import pprint
pprint(dump(obj))

y los resultados

{'__type__': '<__main__.stdClass object at 0x2b126000b890>',
 'dict': {'a': 1, 'c': 3, 'b': 2, 'more': {'y': 25, 'z': 26}},
 'int': 1,
 'list': [1, 2, 3, 'a', 'b', 'c', [1, 2, 3, 4]],
 'subObj': {'__type__': '<__main__.stdClass object at 0x2b126000b8d0>',
            'value': 'foobar'},
 'tup': (1, 2, 3, 4)}

  • Creo que estás pensando en var_export.

    –Paul Biggar

    21 de diciembre de 2009 a las 18:05

  • sí, var_export en php y repr en python están algo relacionados, es decir, si desea una representación de cadena oficial de algún objeto, use repr(). Para que no sea oficial (léase legible por humanos), siempre puede forzar la conversión a una cadena: str (objeto), que produce información similar a print_r () de php (usado mucho más a menudo para la depuración que var_dump).

    – Víctor Farazdagi

    29 de marzo de 2010 a las 17:43

  • Corrija la respuesta, es incorrecta. Como se mencionó, está hablando de var_export o describe var_dump() de manera diferente.

    – Marcos

    23/10/2010 a las 23:35


avatar de usuario
Hassan

Viejo tema, pero vale la pena intentarlo.

Aquí hay un simple y eficiente var_dump función:

def var_dump(var, prefix=''):
    """
    You know you're a php developer when the first thing you ask for
    when learning a new language is 'Where's var_dump?????'
    """
    my_type="[" + var.__class__.__name__ + '(' + str(len(var)) + ')]:'
    print(prefix, my_type, sep='')
    prefix += '    '
    for i in var:
        if type(i) in (list, tuple, dict, set):
            var_dump(i, prefix)
        else:
            if isinstance(var, dict):
                print(prefix, i, ': (', var[i].__class__.__name__, ') ', var[i], sep='')
            else:
                print(prefix, '(', i.__class__.__name__, ') ', i, sep='')

Salida de muestra:

>>> var_dump(zen)

[list(9)]:
    (str) hello
    (int) 3
    (int) 43
    (int) 2
    (str) goodbye
    [list(3)]:
        (str) hey
        (str) oh
        [tuple(3)]:
            (str) jij
            (str) llll
            (str) iojfi
    (str) call
    (str) me
    [list(7)]:
        (str) coucou
        [dict(2)]:
            oKey: (str) oValue
            key: (str) value
        (str) this
        [list(4)]:
            (str) a
            (str) new
            (str) nested
            (str) list

  • if type(i) in (list, tuple, dict, set): no parece funcionar. Al pasar un objeto: TypeError: object of type 'TestPacketDecode' has no len()

    – JvdBerg

    9 de julio de 2021 a las 10:01


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad