How to Solve Python TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

by | Programming, Python, Tips

Python provides support for arithmetic operations between numerical values with arithmetic operators. Suppose we try to perform certain operations between a string and an integer value, for example, concatenation +. In that case, we will raise the error: “TypeError: unsupported operand type(s) for +: ‘str’ and ‘int’”.

This tutorial will go through the error with example scenarios to learn how to solve it.


TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

What is a TypeError?

TypeError tells us that we are trying to perform an illegal operation for a specific Python data type. TypeError exceptions may occur while performing operations between two incompatible data types. In this article, the incompatible data types are string and integer.

Artithmetic Operators

We can use arithmetic operators for mathematical operations. There are seven arithmetic operators in Python:

OperatorSymbolSyntax
Addition+x + y
Subtractionx -y
Multiplication*x *y
Division/x / y
Modulus%x % y
Exponentiation**x ** y
Floor division//x // y
Table of Python Arithmetic Operators

All of the operators are suitable for integer operands. We can use the multiplication operator with string and integer combined. For example, we can duplicate a string by multiplying a string by an integer. Let’s look at an example of multiplying a word by four.

string = "research"

integer = 4

print(string * integer)
researchresearchresearchresearch

Python supports multiplication between a string and an integer. However, if you try to multiply a string by a float you will raise the error: TypeError: can’t multiply sequence by non-int of type ‘float’.

However, suppose we try to use other operators between a string and an integer. Operand x is a string, and operand y is an integer. In that case, we will raise the error: TypeError: unsupported operand type(s) for: [operator]: ‘str’ and ‘int’, where [operator] is the arithmetic operator used to raise the error. If operand x is an integer and operand y is a string, we will raise the error: TypeError: unsupported operand type(s) for: [operator]: ‘int’ and ‘str’. Let’s look at an example scenario.

Example: Using input() Without Converting to Integer Using int()

Python developers encounter a common scenario when the code takes an integer value using the input() function but forget to convert it to integer datatype. Let’s write a program that calculates how many apples are in stock after a farmer drops off some at a market. The program defines the current number of apples; then, the user inputs the number of apples to drop off. We will then sum up the current number with the farmer’s apples to get the total apples and print the result to the console. Let’s look at the code:

num_apples = 100

farmer_apples = input("How many apples are you dropping off today?: ")

total_apples = num_apples + farmer_apples

print(f'total number of apples: {total_apples}')

Let’s run the code to see what happens:

How many apples are you dropping off today?: 50

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 total_apples = num_apples + farmer_apples

TypeError: unsupported operand type(s) for +: 'int' and 'str'

We raise the because Python does not support the addition operator between string and integer data types.

Solution

The solve this problem, we need to convert the value assigned to the farmer_apples variable to an integer. We can do this using the Python int() function. Let’s look at the revised code:

num_apples = 100

farmer_apples = int(input("How many apples are you dropping off today?: "))

total_apples = num_apples + farmer_apples

print(f'total number of apples: {total_apples}')

Let’s run the code to get the correct result:

How many apples are you dropping off today?: 50

total number of apples: 150

Variations of TypeError: unsupported operand type(s) for: ‘int’ and ‘str’

If we are trying to perform mathematical operations between operands and one of the operands is a string, we need to convert the string to an integer. This solution is necessary for the operators: addition, subtraction, division, modulo, exponentiation and floor division, but not multiplication. Let’s look at the variations of the TypeError for the different operators.

TypeError: unsupported operand type(s) for -: ‘int’ and ‘str’

The subtraction operator – subtracts two operands, x and y. Let’s look at an example with an integer and a string:

x = 100

y = "10"

print(f'x - y = {x - y}')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 print(f'x - y = {x - y}')

TypeError: unsupported operand type(s) for -: 'int' and 'str'

Solution

We must convert the y variable to an integer using the int() function to solve this. Let’s look at the revised code and result:

x = 100

y = "10"

print(f'x - y = {x - int(y)}')
x - y = 90

TypeError: unsupported operand type(s) for /: ‘int’ and ‘str’

The division operator divides the first operand by the second and returns the value as a float. Let’s look at an example with an integer and a string :

x = 100

y = "10"

print(f'x / y = {x / y}')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 print(f'x / y = {x / y}')

TypeError: unsupported operand type(s) for /: 'int' and 'str'

Solution

We must convert the y variable to an integer using the int() function to solve this. Let’s look at the revised code and result:

x = 100

y = "10"

print(f'x / y = {x / int(y)}')
x / y = 10.0

TypeError: unsupported operand type(s) for %: ‘int’ and ‘str’

The modulus operator returns the remainder when we divide the first operand by the second. If the modulus is zero, then the second operand is a factor of the first operand. Let’s look at an example with an and a string.

x = 100

y = "10"

print(f'x % y = {x % y}')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 print(f'x % y = {x % y}')

TypeError: unsupported operand type(s) for %: 'int' and 'str'

Solution

We must convert the y variable to an integer using the int() function to solve this. Let’s look at the revised code and result:

x = 100

y = "10"

print(f'x % y = {x % int(y)}')
x % y = 0

TypeError: unsupported operand type(s) for ** or pow(): ‘int’ and ‘str’

The exponentiation operator raises the first operand to the power of the second operand. We can use this operator to calculate a number’s square root and to square a number. Let’s look at an example with an integer and a string:

x = 100

y = "10"

print(f'x ** y = {x ** y}')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 print(f'x ** y = {x ** y}')

TypeError: unsupported operand type(s) for ** or pow(): 'int' and 'str'

Solution

We must convert the y variable to an integer using the int() function to solve this. Let’s look at the revised code and result:

x = 100

y = "10"

print(f'x ** y = {x ** int(y)}')
x ** y = 100000000000000000000

TypeError: unsupported operand type(s) for //: ‘int’ and ‘str’

The floor division operator divides the first operand by the second and rounds down the result to the nearest integer. Let’s look at an example with an integer and a string:

x = 100

y = "10"

print(f'x // y = {x // y}')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
1 print(f'x // y = {x // y}')

TypeError: unsupported operand type(s) for //: 'int' and 'str'

Solution

We must convert the y variable to an integer using the int() function to solve this. Let’s look at the revised code and result:

x = 100

y = "10"

print(f'x // y = {x // int(y)}')
x // y = 10

Summary

Congratulations on reading to the end of this tutorial! The error: TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ occurs when we try to perform addition between an integer value and a string value. Python does not support arithmetic operations between strings and integers, excluding multiplication. To solve this error, ensure you use only integers for mathematical operations by converting string variables with the int() function. If you want to concatenate an integer to a string separate from mathematical operations, you can convert the integer to a string. There are other ways to concatenate an integer to a string, which you can learn in the article: “Python TypeError: can only concatenate str (not “int”) to str Solution“. Now you are ready to use the arithmetic operators in Python like a pro!

Go to the online courses page on Python to learn more about coding in Python for data science and machine learning.

Have fun and happy researching!

Profile Picture
Senior Advisor, Data Science | [email protected] | + posts

Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.

Buy Me a Coffee