Какой аналог функции var_dump() в Python для отладки переменных?
Основной аналог: функция print() с repr() или pprint
Прямого аналога var_dump() в Python нет, но есть несколько способов получить похожий результат. Самый простой — использовать встроенную функцию print() вместе с repr(). Однако для полноценной отладки лучше применять модуль pprint (pretty print) и специальную функцию pdb.pp().
1. Базовый вариант: print() + repr()
Функция repr() возвращает строковое представление объекта, которое показывает его тип и структуру:
data = {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
print(repr(data))
# Вывод: {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
Это не так подробно, как var_dump(), но уже показывает структуру. Для вложенных данных сложно читать.
2. Лучший вариант: модуль pprint
Модуль pprint форматирует вывод с отступами, что делает его похожим на var_dump():
from pprint import pprint
data = {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
pprint(data)
# Вывод:
# {'age': 30,
# 'hobbies': ['reading', 'swimming'],
# 'name': 'Alice'}
Плюс: автоматически сортирует ключи словарей (как var_dump) и форматирует вложенные структуры.
3. Продвинутый вариант: модуль pdb (отладчик)
Если нужно увидеть типы данных (как var_dump), используйте pdb.pp() (Python 3.10+):
import pdb
data = {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
pdb.pp(data)
# Вывод:
# {'name': 'Alice' (str), 'age': 30 (int), 'hobbies': ['reading', 'swimming'] (list)}
Это наиболее близко к var_dump(), так как показывает типы элементов.
4. Для объектов и классов: vars() и dir()
Если нужно отладить объект, используйте vars() для атрибутов или dir() для всех методов:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
user = User('Bob', 25)
print(vars(user))
# Вывод: {'name': 'Bob', 'age': 25}
5. Сторонняя библиотека: rich
Для максимально наглядного вывода с цветами и типами установите библиотеку rich:
pip install rich
from rich import print as rprint
data = {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
rprint(data)
# Вывод с подсветкой синтаксиса и типами
Сравнение с var_dump()
- var_dump() — показывает тип, длину, значение и структуру.
- pprint — показывает структуру, но без типов.
- pdb.pp() — показывает типы, но без длины строк/массивов.
- rich — самый наглядный, но требует установки.
Для повседневной отладки рекомендую pprint (встроенный) или pdb.pp() (если нужны типы).
Альтернативный подход: кастомная функция var_dump()
Если вам не хватает встроенных средств, можно написать свою функцию, которая эмулирует поведение var_dump(). Вот простой пример:
def var_dump(variable, indent=0):
if isinstance(variable, dict):
print(' ' * indent + 'dict (' + str(len(variable)) + ')')
for key, value in variable.items():
print(' ' * (indent + 2) + f'["{key}"]=>')
var_dump(value, indent + 4)
elif isinstance(variable, list):
print(' ' * indent + 'list (' + str(len(variable)) + ')')
for i, value in enumerate(variable):
print(' ' * (indent + 2) + f'[{i}]=>')
var_dump(value, indent + 4)
elif isinstance(variable, str):
print(' ' * indent + f'string({len(variable)}) "{variable}"')
elif isinstance(variable, int):
print(' ' * indent + f'int({variable})')
elif isinstance(variable, float):
print(' ' * indent + f'float({variable})')
elif variable is None:
print(' ' * indent + 'NULL')
else:
print(' ' * indent + f'object({type(variable).__name__})')
# Пример использования
data = {'name': 'Alice', 'age': 30, 'hobbies': ['reading', 'swimming']}
var_dump(data)
Этот код выведет:
dict (3)
["name"]=>
string(5) "Alice"
["age"]=>
int(30)
["hobbies"]=>
list (2)
[0]=>
string(7) "reading"
[1]=>
string(8) "swimming"
Такой подход даёт полный контроль над форматированием. Вы можете добавить поддержку объектов, булевых значений и других типов по мере необходимости.