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 fix it.
One of the most frequent errors encountered by Python developers, especially beginners, is the TypeError: unsupported operand type(s) for +: 'int' and 'str'
. This error occurs when you attempt to use the +
operator to combine an integer (int
) with a string (str
). Python, being a strongly typed language, does not implicitly convert between these distinct data types when using the +
operator, leading to this runtime error. Understanding the root cause and knowing how to correctly handle type conversions is crucial for writing robust Python code.
Why the Error Occurs: Type Mismatch
The +
operator in Python has different behaviors depending on the data types it operates on. When used with two numbers (integers or floats), it performs arithmetic addition. When used with two strings, it performs string concatenation. However, when you try to use it with an integer and a string simultaneously, Python doesn't know whether you intend to perform arithmetic addition (which is impossible with a string) or string concatenation (which requires both operands to be strings). This ambiguity is why Python raises a TypeError
rather than attempting an unpredictable implicit conversion.
age = 30
name = "Alice"
# This will raise the TypeError
# print("Hello, my name is " + name + " and I am " + age + " years old.")
Example of code that causes the 'int' and 'str' TypeError
flowchart TD A[Start] --> B{Attempt to add 'int' and 'str' using '+'?} B -- Yes --> C[Python Interpreter detects type mismatch] C --> D["TypeError: unsupported operand type(s) for +: 'int' and 'str'"] D --> E[End] B -- No --> F[Perform valid operation (e.g., int+int or str+str)] F --> E
Flowchart illustrating how the TypeError occurs
Solutions: Explicit Type Conversion
The solution to this error is to explicitly convert one of the operands to match the type of the other, depending on your desired outcome. Most commonly, you'll want to convert the integer to a string if you're trying to combine it with other strings for display or logging purposes.
Method 1: Using str()
for Concatenation
The most straightforward way to resolve this is to convert the integer to a string using the built-in str()
function before concatenation. This ensures that both operands to the +
operator are strings.
age = 30
name = "Alice"
# Convert 'age' to a string before concatenation
message = "Hello, my name is " + name + " and I am " + str(age) + " years old."
print(message)
# Expected Output: Hello, my name is Alice and I am 30 years old.
Correctly concatenating an integer with strings using str()
Method 2: Using F-strings (Formatted String Literals) - Python 3.6+
F-strings provide a concise and readable way to embed expressions inside string literals. They automatically handle the conversion of non-string types (like integers) to their string representation within the string. This is generally the preferred method for string formatting in modern Python.
age = 30
name = "Alice"
# Using an f-string for clear and concise formatting
message = f"Hello, my name is {name} and I am {age} years old."
print(message)
# Expected Output: Hello, my name is Alice and I am 30 years old.
Using f-strings for elegant string formatting
Method 3: Using str.format()
Method
The str.format()
method is another powerful way to format strings. It allows you to define placeholders in your string and then fill them with values. Like f-strings, it handles type conversion automatically.
age = 30
name = "Alice"
# Using the .format() method
message = "Hello, my name is {} and I am {} years old.".format(name, age)
print(message)
# Expected Output: Hello, my name is Alice and I am 30 years old.
Using the str.format()
method for string formatting
Method 4: Using %
Operator (Old Style Formatting)
While less common in modern Python, the %
operator can also be used for string formatting, similar to C's printf
. It requires format specifiers (e.g., %s
for string, %d
for integer).
age = 30
name = "Alice"
# Using the % operator (older style)
message = "Hello, my name is %s and I am %d years old." % (name, age)
print(message)
# Expected Output: Hello, my name is Alice and I am 30 years old.
Using the %
operator for string formatting
+
operator for concatenating many strings, especially in a loop, as it can be inefficient. F-strings or str.join()
are generally more performant for complex string building.By understanding the type mismatch and employing explicit conversion or modern string formatting techniques, you can easily overcome the TypeError: unsupported operand type(s) for +: 'int' and 'str'
and write cleaner, more functional Python code.