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
Subprocess.Call Using String VS Using List
Assigning to Variable from Parent Function: "Local Variable Referenced Before Assignment"
Why Does '.Sort()' Cause the List to Be 'None' in Python
How to Obtain the Element-Wise Logical Not of a Pandas Series
Typeerror: a Bytes-Like Object Is Required, Not 'Str' in Python and CSV
Django 1.7 Throws Django.Core.Exceptions.Appregistrynotready: Models Aren't Loaded Yet
Weird Try-Except-Else-Finally Behavior with Return Statements
Datetime to String with Series in Pandas
What's the Best Way to Parse Command Line Arguments
Making a Request to a Restful API Using Python
How to Convert Integer Timestamp into a Datetime
How Are Glob.Glob()'s Return Values Ordered
Extract Images from PDF Without Resampling, in Python