Typeerror: Cannot Concatenate 'Str' and 'Int' Objects

TypeError: cannot concatenate 'str' and 'int' objects

There are two ways to fix the problem which is caused by the last print statement.

You can assign the result of the str(c) call to c as correctly shown by @jamylak and then concatenate all of the strings, or you can replace the last print simply with this:

print "a + b as integers: ", c  # note the comma here

in which case

str(c)

isn't necessary and can be deleted.

Output of sample run:

Enter a: 3
Enter b: 7
a + b as strings: 37
a + b as integers: 10

with:

a = raw_input("Enter a: ")
b = raw_input("Enter b: ")
print "a + b as strings: " + a + b # + everywhere is ok since all are strings
a = int(a)
b = int(b)
c = a + b
print "a + b as integers: ", c

Python TypeError: cannot concatenate 'str' and 'int' objects when trying to print

You forgot to reassign the new values:

timeInSeconds = 1823
timeInMinutes = timeInSeconds / 60
timeInRest = timeInSeconds % 60

timeInMinutes = str(timeInMinutes)
timeInRest = str(timeInRest)

print("Your time in minutes and seconds is " + timeInMinutes + ":" + timeInRest)

Basically doing this :

str(timeInMinutes)

Does not mean your TimeInMinutes variable is now a string. You have to reassign it like so :

timeInMinutes = str(timeInMinutes)

I believe this is what you meant to do.


However, it could be useful to keep the int values for later. If that's the case, you could just create new variables like so :

timeInMinutesStr = str(timeInMinutes)
timeInRestStr = str(timeInRest)

print("Your time in minutes and seconds is " + timeInMinutesStr + ":" + timeInRestStr)

Or, you could just convert the values directly in the print, to avoid having to assign new variables that you might not use later :

print("Your time in minutes and seconds is " + str(timeInMinutes) + ":" + str(timeInRest))

TypeError: Cannot concatenate 'str' and 'int'

I'm not entirely sure (I have never coded with Python before) but it seems that the hpGanon variable is an integer and not a string, so it cannot put the two together. To convert an integer to a string in Python (I searched this up :P), you need to do str(integer).

So, to implement this in your example, try something like this:

print("Ganon now has " + str(hpGanon) + "hit points.")

How can I concatenate str and int objects?

The problem here is that the + operator has (at least) two different meanings in Python: for numeric types, it means "add the numbers together":

>>> 1 + 2
3
>>> 3.4 + 5.6
9.0

... and for sequence types, it means "concatenate the sequences":

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'abc' + 'def'
'abcdef'

As a rule, Python doesn't implicitly convert objects from one type to another1 in order to make operations "make sense", because that would be confusing: for instance, you might think that '3' + 5 should mean '35', but someone else might think it should mean 8 or even '8'.

Similarly, Python won't let you concatenate two different types of sequence:

>>> [7, 8, 9] + 'ghi'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

Because of this, you need to do the conversion explicitly, whether what you want is concatenation or addition:

>>> 'Total: ' + str(123)
'Total: 123'
>>> int('456') + 789
1245

However, there is a better way. Depending on which version of Python you use, there are three different kinds of string formatting available2, which not only allow you to avoid multiple + operations:

>>> things = 5
>>> 'You have %d things.' % things  # % interpolation
'You have 5 things.'
>>> 'You have {} things.'.format(things)  # str.format()
'You have 5 things.'
>>> f'You have {things} things.'  # f-string (since Python 3.6)
'You have 5 things.'

... but also allow you to control how values are displayed:

>>> value = 5
>>> sq_root = value ** 0.5
>>> sq_root
2.23606797749979
>>> 'The square root of %d is %.2f (roughly).' % (value, sq_root)
'The square root of 5 is 2.24 (roughly).'
>>> 'The square root of {v} is {sr:.2f} (roughly).'.format(v=value, sr=sq_root)
'The square root of 5 is 2.24 (roughly).'
>>> f'The square root of {value} is {sq_root:.2f} (roughly).'
'The square root of 5 is 2.24 (roughly).'

Whether you use % interpolation, str.format(), or f-strings is up to you: % interpolation has been around the longest (and is familiar to people with a background in C), str.format() is often more powerful, and f-strings are more powerful still (but available only in Python 3.6 and later).

Another alternative is to use the fact that if you give print multiple positional arguments, it will join their string representations together using the sep keyword argument (which defaults to ' '):

>>> things = 5
>>> print('you have', things, 'things.')
you have 5 things.
>>> print('you have', things, 'things.', sep=' ... ')
you have ... 5 ... things.

... but that's usually not as flexible as using Python's built-in string formatting abilities.


1 Although it makes an exception for numeric types, where most people would agree on the 'right' thing to do:

>>> 1 + 2.3
3.3
>>> 4.5 + (5.6+7j)
(10.1+7j)

2 Actually four, but template strings are rarely used, and are somewhat awkward.


Other Resources:

  • Real Python: Splitting, Concatenating, and Joining Strings in Python
  • Python.org: string - Common string operations
  • python string concatenation with int site:stackoverflow.com

TypeError: cannot concatenate 'str' and 'int' objects in face detection using haarcascade

As I said in comments, try converting Id to a string object.

cv2.imwrite("dataSet/User." + str(Id) + '.' + str(sampleNum) + ".jpg", gray[y:y+h,x:x+w])


Related Topics



Leave a reply



Submit