В Python у каждого значения есть тип: число, строка, список и т. д. Часто данные приходят «не в том виде», который нужен для операции, — например, число в виде строки из ввода пользователя или CSV‑файла. Тогда используют преобразование типов: int(), float(), str(). В этой статье разберём, когда это необходимо, какие ошибки возникают при неправильном преобразовании и как сохранить данные и избежать сбоев. Всё — с примерами и практическими приёмами.
Почему приходится преобразовывать типы
Основные ситуации:
- Ввод пользователя. Функция
input()всегда возвращает строку, даже если пользователь ввёл цифры. - Чтение файлов и CSV. Числа в текстовых файлах — это строки.
- Работа с API и JSON. Числовые значения могут приходить как строки (например, из‑за особенностей сериализации).
- Математические операции. Нельзя складывать строку и число:
"10" + 5вызовет ошибку. - Форматирование и вывод. Чтобы красиво вывести число, его часто нужно превратить в строку.
Преобразование в целое число: int()
Когда использовать
Когда нужно выполнить целочисленные операции: подсчёт, индексы, количество элементов, идентификаторы (если они действительно целые).
age_str = input("Ваш возраст: ") # строка age = int(age_str) # целое число print(f"Через год вам будет {age + 1}")
Нюансы и риски
int()не принимает дробные числа в виде строки:int("3.14")вызоветValueError. Сначала нужно черезfloat():int(float("3.14"))→3.- Пробелы допускаются, но только по краям:
int(" 123 ")работает, аint("12 3")— нет. - Поддерживаются разные основания системы счисления (редко, но бывает):
int("101", 2)→5.
Как не потерять данные при усечении
Преобразование float → int всегда отбрасывает дробную часть (округление «вниз» для положительных чисел):
x = 3.99 y = int(x) # 3
Если важно округление по математическим правилам, используйте round():
x = 3.99 y = round(x) # 4 z = int(round(x)) # тоже 4, если дальше нужно именно int
Преобразование в число с плавающей точкой: float()
Когда использовать
Для измерений, цен, весов, процентов, расчётов с дробной частью.
price_str = "199.90" price = float(price_str) discount = 0.1 final = price * (1 - discount) print(final) # 179.91
Нюансы и риски
- В разных локалях разделитель дробной части может быть запятой, но
float()в Python ожидает точку:float("199,90")вызовет ошибку. Если данные из CSV с запятой, нужно заменить:float("199,90".replace(",", ".")). - Очень большие или очень маленькие числа могут привести к
OverflowErrorили статьinf(бесконечность). - Точность:
float— это двоичная плавающая точка, поэтому возможны небольшие погрешности:0.1 + 0.2не всегда точно равно0.3. Для денег лучше использоватьdecimal.Decimal.
Пример с Decimal для финансовых расчётов:
from decimal import Decimal price = Decimal("199.90") discount = Decimal("0.1") final = price * (Decimal(1) - discount) print(final) # точное значение без «хвостов»

Преобразование в строку: str()
Когда использовать
- Для вывода и логирования.
- Для объединения с другими строками.
- Для записи в текстовые файлы и JSON.
- Когда тип данных должен быть строкой (например, ключи в словаре, если логика требует именно строковые ключи).
count = 15 message = "Осталось товаров: " + str(count) print(message) # Осталось товаров: 15
Удобнее через f‑строки:
message = f"Осталось товаров: {count}"
Python сам вызывает str() для подстановки, но понимание этого помогает избегать ошибок при сложной логике.
Нюанс: преобразование сложных объектов
str() работает и для списков, словарей и т. п., но результат — это строковое представление для человека, а не формат для хранения:
data = [1, 2, 3] s = str(data) # "[1, 2, 3]" # Это не JSON и не CSV — не стоит парсить обратно через eval()
Для надёжного сохранения/передачи используйте json.dumps() или специализированные сериализаторы.
Обработка ошибок: try/except и валидация
Самая частая ошибка — попытка преобразовать «мусорные» данные:
value = "не число" n = int(value) # ValueError
Чтобы программа не падала, используют обработку исключений:
user_input = input("Введите число: ") try: n = int(user_input) except ValueError: print("Это не целое число.") n = None
Практический пример: безопасный ввод с повтором
while True: user_input = input("Введите целое число: ") try: n = int(user_input) break except ValueError: print("Некорректный ввод. Попробуйте ещё раз.") print("Вы ввели:", n)

Проверка перед преобразованием: str.isdigit() и аналоги
Иногда удобно сначала проверить строку, чтобы избежать исключений:
s = "12345" if s.isdigit(): n = int(s) else: # обработка ошибки pass
Нюансы:
isdigit()не работает с отрицательными числами:"-123".isdigit()→False.- Не работает с дробными:
"3.14".isdigit()→False. - Для отрицательных целых можно проверить так:
s = "-123" if s.lstrip("-").isdigit() and s.count("-") <= 1: n = int(s)
Но для сложных случаев лучше полагаться на try/except: он покрывает все варианты и не требует ручной логики.
Практический пример: расчёт суммы из CSV
Допустим, есть строки CSV с ценами, где разделитель — запятая, а дробная часть тоже через запятую:
Товар,Цена
Яблоки,120,50
Груши,89,00
Код для безопасного подсчёта:
lines = [ "Яблоки,120,50", "Груши,89,00", ] total = 0.0 for line in lines: parts = line.split(",") if len(parts) < 2: continue price_str = parts[1].strip() # Заменяем запятую на точку для float price_str_fixed = price_str.replace(",", ".") try: price = float(price_str_fixed) total += price except ValueError: # Пропускаем или логируем ошибку print(f"Не удалось распарсить цену: {price_str}") print("Общая сумма:", total)
Здесь преобразование спасает от ошибок, а проверка и обработка исключений — от потери данных и аварийного завершения.
Когда что применять
- Нужно целое число для подсчёта, индексов —
int(). - Нужна дробная часть, измерения, деньги (с осторожностью) —
float(). Для денег лучшеDecimal. - Нужен вывод, объединение, запись в файл —
str()или f‑строки. - Данные могут быть некорректными — всегда оборачивайте в
try/except. - Если важна точность и предсказуемость — используйте
Decimalвместоfloat.



