The python error TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’ occurs when you try to subtract a string from another that contains numbers in both strings. The TypeError is due to the operand type minus (‘-‘) is unsupported between str (string). Auto casting is not supported by python. You can subtract a number from a different number. If you try to subtract a string from another string that may contain a number, the error TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’ will be thrown.

In python, an arithmetic operation can be used between valid numbers. For example, you can subtract a number from a different number. The integer can be subtracted from a float number. If you try to subtract a string from a string that contains a number, the error TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’ will be thrown.

Objects other than numbers can not be used in python substraction. The arithmetic subtract can be used only for numbers. If a number is stored as a string, it should be converted to an integer before subtracting it from each string. If you try to subtract a string to a string containing a number, the error TypeError: unsupported operand type(s) for +: ‘str’ and ‘str’ will be shown.



Exception

The error TypeError: unsupported operand type(s) for-: ‘str’ and ‘str’  will be shown as below the stack trace. The stack trace shows the line where a string is subtracted from a string that may contain valid numbers.

Traceback (most recent call last):
  File "/Users/python/Desktop/test.py", line 3, in <module>
    print x - y
TypeError: unsupported operand type(s) for -: 'str' and 'str'
[Finished in 0.0s with exit code 1]


How to reproduce this error

If you try to subtract a string from another string containing a number, the error TypeError: unsupported operand type(s) for-: ‘str’ and ‘str’ will be reproduced. Create two python variables. Assign variables with a string that contains a valid number. Subtract from the string to another string.

x = '5'
y = '2'
print x - y

Output

Traceback (most recent call last):
  File "/Users/python/Desktop/test.py", line 3, in <module>
    print x - y
TypeError: unsupported operand type(s) for -: 'str' and 'str'
[Finished in 0.0s with exit code 1]


Root Cause

Python does not support auto casting. The arithmetic operation subtraction can be used to subtract between two valid numbers. If a string is subtracted from another string, this error will be thrown. The string may contain a valid number. The string should be converted to integer before subtracting.



Solution 1

If you try to subtract a string from another string contains a valid number, convert the string to an integer using the built in function int(). This will resolve the error. The built in function int() converts a string contains a valid number to an integer number.

x = int('5')
y = int('2')
print x - y

Output

3
[Finished in 0.1s]


Solution 2

If you are trying to subtract a string from a string containing a valid number, change the string to an integer. This is going to address the error TypeError: unsupported operand type(s) for-: ‘str’ and ‘str’ . You can not subtract a string from another string.

x = 5
y = 2
print x - y

Output

3
[Finished in 0.1s]


Solution 3

If the variable type is unknown, the variable type should be checked before subtracting the number to another number. The example below shows the method of verification before subtracting the numbers

x = '5'
y = '2'
if (x is int) and (y is int) :
	print x - y
else :
	print "Not a number"

Output

Not a number
[Finished in 0.0s]



Leave a Reply