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

avatar

Borislav Hadzhiev

Last updated: Apr 20, 2022

banner

Check out my new book

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

The Python "TypeError: unsupported operand type(s) for /: 'str' and 'int'" occurs when we try to use the division / operator with a string and a number. To solve the error, convert the string to an int or a float, e.g. int(my_str) / my_num.

typeerror unsupported operand type for slash str and int

Here is an example of how the error occurs.

main.py
my_str = '10' my_num = 5 # ⛔️ TypeError: unsupported operand type(s) for /: 'str' and 'int' result = my_str / my_num

We are trying to use the division operator with a string and a number.

To solve the error, we have to convert the string to a number (an int or a float).

main.py
my_str = '10' my_num = 5 result = int(my_str) / my_num print(result) # 👉️ 2.0

We used the int() class to convert the string to an integer before using the division operator.

IMPORTANT: if you use the input() built-in function, all of the values the user enters get converted to strings (even numeric values).

If you have a float wrapped in a string, use the float() class instead.

main.py
my_str = '10' my_num = 5 result = float(my_str) / my_num print(result) # 👉️ 2.0

The division operator / always produces a float, if you need an integer, you can use the floor division operator // instead.

main.py
my_str = '10' my_num = 5 result = int(my_str) // my_num print(result) # 👉️ 2

If you have a string that may also contain characters but you only need to extract an integer, use the filter() function to filter out all non-digits.

main.py
my_str = 'ab 1 cd 0' my_num_1 = int(''.join(filter(str.isdigit, my_str))) print(my_num_1) # 👉️ 10 my_num_2 = 5 result = my_num_1 / my_num_2 print(result) # 👉️ 2.0

The filter function takes a function and an iterable as arguments and constructs an iterator from the elements of the iterable for which the function returns a truthy value.

The str.isdigit method returns True if all characters in the string are digits and there is at least 1 character, otherwise False is returned.

We basically check if each character in the string is a digit, return the result and join the digits into a single string before using the int() class to get an integer value.

If you aren't sure what type a variable stores, use the built-in type() class.

main.py
my_str_1 = '10' print(type(my_str_1)) # 👉️ <class 'str'> print(isinstance(my_str_1, str)) # 👉️ True my_int_1 = 2 print(type(my_int_1)) # 👉️ <class 'int'> print(isinstance(my_int_1, int)) # 👉️ True

The type class returns the type of an object.

The isinstance function returns True if the passed in object is an instance or a subclass of the passed in class.

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.