Unsupported operand type(s) for +: 'int' and 'str'
Categories:
Understanding and Resolving 'Unsupported operand type(s) for +: 'int' and 'str'' in Python

This article explains the common Python error 'Unsupported operand type(s) for +: 'int' and 'str'', why it occurs, and provides practical solutions to effectively handle type mismatches when performing operations.
The 'Unsupported operand type(s) for +: 'int' and 'str'' error is one of the most frequent type-related errors encountered by Python developers. It occurs when you attempt to use the + operator (or other operators) with operands of incompatible types, specifically an integer (int) and a string (str). Python is a strongly typed language, meaning it doesn't automatically convert types in all contexts, especially when it could lead to ambiguous or unintended results. This article will delve into the root causes of this error and provide clear, actionable strategies to resolve it.
The Core Problem: Type Mismatch
Python's + operator is overloaded, meaning its behavior changes based on the types of the operands. When used with two numbers (e.g., int or float), it performs arithmetic addition. When used with two strings, it performs string concatenation. However, when you try to add an int and a str directly, Python doesn't know whether you intend to convert the number to a string and concatenate, or convert the string to a number and add. Because this intent is ambiguous, Python raises a TypeError to prevent potential data loss or incorrect calculations.
age = 30
name = "Alice"
# This will raise the TypeError
# print("Hello, " + name + ". You are " + age + " years old.")
Example of code that causes the 'int' and 'str' TypeError

Decision flow for Python's type checking with the '+' operator
Solution 1: Explicit Type Conversion to String
The most common and often correct solution is to explicitly convert the integer to a string before concatenating it with other strings. Python provides the built-in str() function for this purpose. This makes your intent clear to the interpreter: you want to treat the number as text.
age = 30
name = "Alice"
# Convert int to str using str()
message = "Hello, " + name + ". You are " + str(age) + " years old."
print(message)
Correctly concatenating an integer with strings using str()
Solution 2: Using f-strings (Formatted String Literals)
For Python 3.6 and later, f-strings offer a concise and highly readable way to embed expressions inside string literals. With f-strings, you don't need to explicitly call str() for non-string types; Python handles the conversion automatically within the curly braces {}.
age = 30
name = "Alice"
# Using an f-string for clear and concise formatting
message = f"Hello, {name}. You are {age} years old."
print(message)
Using f-strings for string formatting and type handling
Solution 3: Using str.format() Method
The str.format() method is another powerful way to format strings, available in Python 2.7+ and Python 3. It provides more control over formatting than simple concatenation and also handles type conversion implicitly when values are passed to placeholders.
age = 30
name = "Alice"
# Using str.format() method
message = "Hello, {}. You are {} years old.".format(name, age)
print(message)
# Using named placeholders
message_named = "Hello, {n}. You are {a} years old.".format(n=name, a=age)
print(message_named)
Formatting strings with str.format()
Solution 4: Explicit Type Conversion to Integer (Less Common for Concatenation)
While less common for string concatenation scenarios, if your intention was actually to perform arithmetic with a string that represents a number, you would convert the string to an integer using int(). This is crucial when you've read numerical input as a string (e.g., from input() or a file) and need to perform calculations.
num_str = "10"
num_int = 5
# This will raise TypeError if num_str is not converted
# total = num_str + num_int
# Convert str to int using int()
total = int(num_str) + num_int
print(f"The sum is: {total}")
Converting a string to an integer for arithmetic operations
"hello"), int() will raise a ValueError. Always handle potential ValueError exceptions when converting user input or external data.