← Назад к вопросам

Что будет если сложить str и int?

2.3 Middle🔥 61 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сложение str и int в Python

Прямой ответ

TypeError: can only concatenate str (not "int") to str

В Python нельзя просто сложить строку и целое число. Это вызывает исключение.

Почему это так

result = "Hello" + 5
# TypeError: can only concatenate str (not "int") to str

Python — строго типизированный язык (в плане операций). Оператор + имеет разный смысл для разных типов:

# Для строк: конкатенация
"Hello" + "World" = "HelloWorld"

# Для чисел: арифметическое сложение
5 + 3 = 8

# Но для str + int: ???
"Hello" + 5 = ???  # Что это должно быть?

Python требует явного приведения типов, потому что это неоднозначно.

Как это исправить

1. Привести int к str (конкатенация)

result = "Hello" + str(5)
print(result)  # "Hello5"

2. Привести str к int (арифметика)

result = int("5") + 10
print(result)  # 15

3. Использовать f-строки (самый питонический способ)

name = "John"
age = 25

# ✅ F-string
result = f"{name} is {age} years old"
print(result)  # "John is 25 years old"

# Эквивалентно:
result = "John" + " is " + str(25) + " years old"

4. Использовать format()

result = "I have {} apples".format(5)
print(result)  # "I have 5 apples"

5. Использовать % форматирование (старый стиль)

result = "I have %d apples" % 5
print(result)  # "I have 5 apples"

# Для нескольких значений:
result = "Name: %s, Age: %d" % ("Alice", 30)
print(result)  # "Name: Alice, Age: 30"

Практические примеры

Частая ошибка в коде:

# ❌ Ошибка
count = 5
message = "You have " + count + " messages"
# TypeError: can only concatenate str (not "int") to str

# ✅ Правильно
message = f"You have {count} messages"

Работа с пользовательским вводом:

user_input = input("Enter your age: ")  # "25" (это строка!)
age = int(user_input)  # Приводим к int
age_next_year = age + 1
print(f"Next year you'll be {age_next_year}")  # "Next year you'll be 26"

Сложные выражения:

# ❌ Ошибка
result = "Result: " + 5 + 10
# TypeError

# ✅ Правильно
result = f"Result: {5 + 10}"
print(result)  # "Result: 15"

Почему Python так строг

Это особенность философии Python:

# Принцип Zen of Python:
# "Explicit is better than implicit"

from this import this  # Импортирует Zen of Python

Python требует явного приведения типов, чтобы:

  1. Избежать неожиданного поведения (в PHP "5" + 3 = 8, в Python это ошибка)
  2. Сделать намерение ясным — когда ты пишешь str(5), ты явно говоришь: конвертируй в строку
  3. Предотвратить ошибки — если написал ошибку в типе, Python скажет об этом, а не молча даст неправильный результат

Сравнение с другими языками

JavaScript (неявная конвертация — опасно)

"Hello" + 5  // "Hello5" — JavaScript автоматически конвертирует
"5" + 3      // "53" — строка
"5" - 3      // 2 — число! Неожиданно

Python (явная конвертация — безопасно)

"Hello" + str(5)  # "Hello5" — явно
int("5") + 3      # 8 — явно
"5" - 3           # TypeError — гарантирует ошибку

Проверка типов перед операцией

def add_to_string(text, number):
    if isinstance(text, str) and isinstance(number, int):
        return f"{text}{number}"
    else:
        raise TypeError("Expected str and int")

print(add_to_string("Value: ", 42))  # "Value: 42"

Лучшие практики

1. Используй f-strings (Python 3.6+)

# ✅ Самый читаемый и быстрый способ
result = f"The answer is {42}"

2. Всегда приводи типы явно

# ❌ Скрытое приведение (плохая идея)
result = str(int(data))

# ✅ Явное и понятное
value: int = int(data)  # Тип аннотация
result = str(value)

3. Используй type hints

from typing import Union

def combine(a: str, b: Union[str, int]) -> str:
    """Объединяет строку и значение."""
    if isinstance(b, int):
        b = str(b)
    return a + b

Заключение

str + int всегда вызывает TypeError. Это правильное поведение, которое защищает от ошибок. Python требует явного приведения типов — и это плюс, а не минус. Используй f-strings для простых случаев и явное приведение для сложных.

Что будет если сложить str и int? | PrepBro