How can I concatenate str and int objects?

can only concatenate str (not "int") to str
cannot concatenate 'str' and 'int' objects python
concatenate string and int python
concatenate int to str
python int to string
concatenate integers python
can only concatenate str (not float'') to str
concatenate integer to string

If I try to do the following:

things = 5
print("You have " + things + " things.")

I get the following error in Python 3.x:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int

... and a similar error in Python 2.x:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

How can I get around this problem?

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 somewhat awkward.

How can I concatenate str and int objects?, Python doesn't know how to add a word and a number, so it says "cannot concatenate 'str' and 'int' objects." A word that you put in quotes is just a string of letters  You cannot concatenate a string and a number (of any kind) in python because those objects have different definitions of the plus(+) operator which are not compatible with each other (In the str case + is used for concatenation, in the number case it is used to add two numbers together).

TL;DR

  1. either: print("You have " + str(things) + " things.") (the old school way)

  2. or: print("You have {} things.".format(things)) (the new pythonic and recommended way)


A bit more verbal explanation: Although there is anything not covered from the excellent @Zero Piraeus answer above, I will try to "minify" it a bit: You cannot concatenate a string and a number (of any kind) in python because those objects have different definitions of the plus(+) operator which are not compatible with each other (In the str case + is used for concatenation, in the number case it is used to add two numbers together). So in order to solve this "misunderstanding" between objects:

  1. The old school way is to cast the number to string with the str(anything) method and then concatenate the result with another string.
  2. The more pythonic and recommended way is to use the format method which is very versatile (you don't have to take my word on it, read the documentation and this article)

Have fun and do read the @Zero Piraeus answer it surely worth your time!

Learning to Program with Python, Python supports string concatenation using + operator. In most of the programming languages, if we concatenate a string with an integer or any other primitive  If you want to concatenate int or floats to a string you must use this: i = 123 a = "foobar" s = a + str (i)

Python 2.x

  1. 'You have %d things.' % things [1]
  2. 'You have {} things.'.format(things) [2]

Python 3.6+

  1. 'You have %d things.' % things [1]
  2. 'You have {} things.'.format(things) [2]
  3. f'You have {things} things.' [3]

Reference

  1. printf-style String Formatting
  2. Built-in types -> str.format
  3. Formatted string literals

Python Concatenate String and int, Python TypeError: cannot concatenate 'str' and 'int' objects.Duration: 3:27 Posted: May 23, 2015 cannot concatenate 'str' and 'int' objects; What would be the correct syntax? I believe I need to cast but not sure how. So far my workaround is to create a StartX and StartY field then combine them into another field StartXY, but this can be time consuming with a large number of records. There should be a better way. !SHAPE.firstpoint.X

str.format()

Another alternative is using str.format() method to concatenate an int into a String.

In your case:

Replace

print("You have " + things + " things.")

With

print("You have {} things".format(things))
Bonus: for multiple concatenation

if you have

first = 'rohit'
last = 'singh'
age = '5'
print("My Username is {}{}{}".format(first,age,last))

Python TypeError: cannot concatenate 'str' and 'int' objects, To concatenate a string with numbers, you need to cast the numbers to string using str(number). For example,>>> a = string >>> b = 1 >>> print  In Python, you may concatenate strings in different ways. Which way to use depends on the scenario or string source. Following are the ways to concat strings in Python: Using + (plus) Using += concatenate operator. The join() method – For iterators. Using StringIO. The space between string literals.

How can I concatenate str and int objects in Python?, One thing to note is that Python cannot concatenate a string and integer. These are considered two separate types of objects. So, if you want to  You cannot concatenate a string and a number (of any kind) in python because those objects have different definitions of the plus(+) operator which are not compatible with each other (In the str case + is used for concatenation, in the number case it is used to add two numbers together).

String Concatenation and Formatting, your value in row[0] is an integer, but you are trying to combine (concatenate) it with a string (text). You can fix this by temporarily casting row[0]  In this post, we will discuss how to concatenate an integer to a string object in C++. 1. C++11 – to_string() The most commonly used approach to concatenate an integer to a string object in C++ is to call std::to_string function which can return the string representation of a specified integer.

Python Error TypeError: cannot concatenate 'str' and 'int' objects , type *fields.date* but when when executed, that is i am trying to access my view, it says: *TypeError: cannot concatenate 'str' and 'int' objects*  The Java String concat() method concatenates the method argument string to the end of string object. Concatenate two strings to produce combined string.

Comments
  • This answer is great in that it provides both background info and multiple solutions, but the actual solutions are buried in the middle of a wall of text. It would benefit from a TLDR at the beginning (as a form of progressive disclosure).
  • @Helen this canonical Q/A is consciously written as a bait & switch – the question has a "gimme teh codez" style, while the answer makes a point of not immediately providing a "gimme teh codez" solution. I disagree that the inverted pyramid / progressive disclosure approach is a good one for beginner-level instruction; it improves the apparent productivity of bad programmers (who will indeed "dr" the "tl" remainder) at the expense of those who will later maintain their code. I'd rather help potentially great programmers than definitively awful ones, and try to contribute accordingly to SO.
  • This answer adds nothing new.
  • On the bright side, if you delete your answer now you'll get a badge for it (don't recall the name, but it's for deleting an answer with at least 3 upvotes).
  • @EthanFurman I think you are looking for this :) stackoverflow.com/help/badges/37/disciplined
  • @Ethan Furman There is nothing that can really be added to that answer, I just tried to minify it a bit and please the demand for a TL;DR from Helen! The canonical is the Zero Piraeus answer by far!
  • This adds nothing whatsoever to the existing answer.
  • And just because someone answered a question before me, it doesn't mean that I can approach it, with my own take (the way I think best describes the answer). If you think that's wrong, I think that'a not more wrong than downvoting someone's answer because you also have an answer for the same question.