Python
Как проверить тип данных в Python: type(), isinstance() и частые ошибки
Чтобы посмотреть тип значения в Python, используйте type(). Эта функция показывает, к какому классу относится объект: строка, число, список, словарь, булево значение или что-то другое. Для быстрой отладки type() подходит отлично, потому что сразу видно, почему код ведет себя не так, как вы ожидали
value = "123"
print(type(value))
Вывод
<class 'str'>
Здесь 123 выглядит как число, но находится в кавычках, поэтому это строка str. Такая ситуация часто появляется после input(): пользователь вводит число, но Python получает текст, и если забыть преобразование через int() или float(), арифметика начинает ломаться или склеивать строки
Проверка через type()
type() удобно использовать, когда вы хотите просто увидеть тип переменной в консоли. Например, можно быстро проверить несколько значений и понять, чем строка отличается от числа, а список от словаря
name = "Динар"
age = 25
price = 19.99
items = ["хлеб", "молоко"]
user = {"name": "Динар"}
active = True
nothing = None
print(type(name))
print(type(age))
print(type(price))
print(type(items))
print(type(user))
print(type(active))
print(type(nothing))
Типы будут такими: str, int, float, list, dict, bool, NoneType. Для новичка это хороший мини-словарь: если вы видите str, перед вами текст, если int — целое число, если list — список, если dict — словарь
Проверка в условии через isinstance()
Если нужно не просто вывести тип, а принять решение в коде, чаще используют isinstance(). Она возвращает True или False, поэтому хорошо подходит для условий
value = 10
if isinstance(value, int):
print("Это целое число")
else:
print("Это не целое число")
Для проверки нескольких типов можно передать кортеж типов
value = 10.5
if isinstance(value, (int, float)):
print("Это число")
Такой вариант удобен, если программа принимает и целые, и дробные числа. В учебном коде это встречается в калькуляторах, обработке цен, подсчете среднего значения и проверке пользовательского ввода
Чем type() отличается от isinstance()
type(value) показывает точный тип объекта, а isinstance(value, SomeClass) проверяет, является ли объект экземпляром указанного класса или его наследника. Для обычных учебных значений разница почти не заметна, но в нормальном коде isinstance() обычно безопаснее для проверок в условии
print(type(True))
print(isinstance(True, bool))
print(isinstance(True, int))
В Python bool связан с int, поэтому некоторые проверки могут удивлять. Именно поэтому при строгой проверке типов нужно понимать, зачем вы вообще проверяете тип: для отладки достаточно type(), а для логики программы чаще лучше проверять поведение или явно приводить данные к нужному виду
Как проверить тип после input()
input() всегда возвращает строку. Даже если пользователь вводит 10, Python получает строку "10", и именно поэтому перед расчетами ввод нужно преобразовать
text = input("Введите число: ")
print(type(text))
number = int(text)
print(type(number))
Если пользователь введет 10, первый type() покажет str, второй — int. Это полезная проверка для любого новичка: если расчет не работает, сначала посмотрите, с чем вы действительно работаете
Как проверить список, словарь и None
items = ["a", "b"]
user = {"name": "Динар"}
result = None
print(isinstance(items, list))
print(isinstance(user, dict))
print(result is None)
Для None обычно используют is None, а не == None. Это привычный стиль Python, потому что None — специальный единственный объект, который означает отсутствие значения
Мини-задача
Напишите программу, которая принимает значение, превращает его в число и показывает тип до и после преобразования
value = input("Введите число: ")
print("До преобразования:", type(value))
number = float(value)
print("После преобразования:", type(number))
print("Удвоенное значение:", number * 2)
Если ввести 12.5, программа покажет, что сначала было str, потом стало float. Это простой, но очень полезный опыт: многие ошибки в Python возникают не из-за сложного синтаксиса, а из-за того, что переменная оказалась не того типа
Частые ошибки
Сравнение type(value) со строкой
Неправильно
if type(value) == "int":
print("число")
Правильно
if isinstance(value, int):
print("число")
Ожидал число, получил строку
Проверьте, не пришло ли значение из input(), файла, JSON или формы. Такие источники часто дают текст, который нужно преобразовать
Проверяю тип вместо нормальной обработки ошибки
Если пользователь может ввести неправильное значение, одной проверки типа мало. Лучше использовать try/except вокруг преобразования
try:
number = float(input("Число: "))
print(number * 2)
except ValueError:
print("Введите число")
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как из списка сделать строку в Python: join, map и частые ошибки
- Как открыть файл в Python: open(), with, чтение текста и частые ошибки
- Какой тип данных возвращает input() в Python: строка, числа и преобразование
- Pandas и Matplotlib с Python: основы анализа данных