Что такое Python-эквивалент PHP var_dump ()?

При отладке в PHP я часто нахожу полезным просто вставить var_dump () в свой код, чтобы показать мне, что такое переменная, каково ее значение и то же самое для всего, что она содержит.

Какой для этого хороший эквивалент Python?

Я нашел это в поисках эквивалента PHP для pythons repr. Спасибо.

Danny Staple 30.04.2012 19:47

повторяющийся вопрос, который упоминает @hop (и ответ с наибольшим количеством голосов), был для меня гораздо полезнее

cwd 24.08.2012 22:46

Если вы обнаружите, что часто используете эту функцию, вы можете подумать об использовании хорошего удаленного отладчика с точками останова. Сначала это может быть трудно понять, но это сэкономит вам время в будущем, и как только вы узнаете, как это сделать, вы никогда не вернетесь назад. Я знаю, что у Eclipse и у Komodo хороший. docs.activestate.com/komodo/8.0/…

styks 12.03.2014 17:10

поскольку этот поток закрыт, см. этот ответ, в котором используется сериализация jsonpickle: stackoverflow.com/a/35804583/1081043

wisbucky 04.03.2016 22:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
446
4
301 484
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

print

Для ваших собственных классов просто определите метод __str__

Ответ принят как подходящий

Чтобы красиво отобразить значение, вы можете использовать модуль pprint. Самый простой способ сбросить с его помощью все переменные - это сделать

from pprint import pprint

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

Если вы работаете в CGI, полезной функцией отладки является модуль cgitb, который отображает значение локальных переменных как часть трассировки.

как насчет отображения типа var? например Null / None, String, Object ..

holms 25.04.2012 16:42

А как насчет pprint() на объектах перечислять, перестановки и т. д.?

JSmyth 23.11.2014 19:33

Это было полезно. Я новичок в Python, но мне показалось, что мне помогло использование .__dict__, например pprint(object.__dict__).

Elijah Lynn 15.11.2017 20:08
object.__dict__ выводит все свойства объекта
Ligemer 22.03.2018 02:32
var_dump в PHP - это не просто «красивое отображение значения» ?
Rain 24.01.2020 20:51

PHP var_export () обычно показывает сериализованную версию объекта, которая может быть использована exec () для воссоздания объекта. Самое близкое к Python - repr ().

«Для многих типов эта функция пытается вернуть строку, которая даст объект с тем же значением при передаче в eval () [...]»

Думаю, вы думаете о var_export.

Paul Biggar 21.12.2009 21:05

да, var_export в php и repr в python в некоторой степени связаны - если вам нужно официальное строковое представление некоторого объекта - вы используете repr (). Чтобы иметь неофициальный (читаемый человеком), вы всегда можете принудительно преобразовать его в строку: str (object), которая выдает информацию, аналогичную print_r () в php (используется для отладки гораздо чаще, чем var_dump).

Victor Farazdagi 29.03.2010 21:43

Исправьте, пожалуйста, ответ, он неверный. Как уже упоминалось, вы либо говорите о var_export, либо по-другому описываете var_dump ().

mark 24.10.2010 03:35

Итак, я взял ответы на этот вопрос и Другой вопрос и подошел ниже. Я подозреваю, что для большинства людей это недостаточно питонично, но мне действительно нужно что-то, что позволило бы мне получить глубокое представление о значениях некоторых неизвестных переменных. Я был бы признателен за любые предложения о том, как я могу улучшить это или легче достичь того же поведения.

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

Вот использование

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))

и результаты.

{'__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)}

+1, это единственный ответ, который действительно имеет функциональность var_dump, когда он встречает объекты

Izkata 01.08.2013 00:20

+1 очень полезно, но показывает ошибку с «if 'диктовать' in dir (obj):», я мог бы исправить, используя «if 'instance at' в str (obj) и obj .__ dict__:»

phipex 16.10.2014 20:45

Я использую самописный класс Printer, но dir () также хорош для вывода полей / значений экземпляра.

class Printer:

       def __init__ (self, PrintableClass):
           for name in dir(PrintableClass):
               value = getattr(PrintableClass,name)
               if  '_' not in str(name).join(str(value)):
                    print '  .%s: %r' % (name, value)

Пример использования:

Printer(MyClass)

если '_' отсутствует в str (name) .join (str (value)): ^ SyntaxError: недопустимый синтаксис

redreinard 27.02.2013 03:53

Я думаю, что лучший эквивалент PHP var_dump($foo, $bar) - это сочетание print с vars:

print vars(foo),vars(bar)

То же самое здесь, единственное, что сработало, как я ожидал (например, var_dump)

Kin 18.11.2011 07:00

Похоже, что для работы vars переменная должна иметь информацию из словаря, иначе вы получите «TypeError: аргумент vars () должен иметь атрибут __ dict __».

Ken 03.01.2013 19:25

Это сделало это для меня - но мне тоже нравится pprint. Вот гибрид: pprint.pprint(vars(foo)).

dsummersl 24.01.2013 23:42

-1, это работает только для некоторых типов переменных, а не для всех. Рассмотрим вместо этого pprint или repr

GetFree 20.05.2013 13:41

Этот ответ также работает для отладки python pdb с помощью команды pp. например pp vars(my_dict). Он должен быть отмечен как правильный, поскольку php var_dump() выводит все значения в структуре данных так же, как py vars().

sijpkes 19.01.2017 06:49

Примечание: для python3 вам нужно использовать паренсы, например print( vars(foo) ).

Armstrongest 03.04.2019 06:23

Наиболее близким к var_dump()PHP является pprint() с функцией getmembers() во встроенном модуле inspect:

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

Этот способ намного лучше добра.

Hola Soy Edu Feliz Navidad 03.02.2021 21:50

У меня нет опыта работы с PHP, но я понимаю стандартную библиотеку Python.

Для ваших целей в Python есть несколько методов:

Модуль Ведение журнала;

Модуль сериализации объектов, который называется соленый огурец. Вы можете написать свою собственную оболочку модуля pickle.

Если вы используете var_dump для тестирования, Python имеет свои собственные модули доктест и модульный тест. Это очень просто и быстро по дизайну.

Я написал очень легкую альтернативу PHP var_dump для использования в Python и позже сделал ее открытым исходным кодом.

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

Вы можете просто установить его с помощью pip:

pip install var_dump

Сбои на наборах - github.com/sha256/python-var-dump/issues/8

anatoly techtonik 24.08.2015 11:35

Старая тема, но попробовать стоит.

Вот простая и эффективная функция var_dump:

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='')

Пример вывода:

>>> 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

Другие вопросы по теме