How to resolve TypeError: can only concatenate str (not "int") to str [duplicate]
- I decided to make some kind of secret code for testing purposes with Unicode.
- I've done that by adding numbers to Unicode so it would be kind of secret.
- I've been getting this error, but I don't know how to solve it.
- Is there any solution?
Original Code
message = input("Enter a message you want to be revealed: ")
secret_string = ""
for char in message:
secret_string += str(chr(char + 7429146))
print("Revealed", secret_string)
q = input("")
Original Error
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-182-49ece294a581> in <module>
2 secret_string = ""
3 for char in message:
----> 4 secret_string += str(chr(char + 7429146))
5 print("Revealed", secret_string)
6 q = input("")
TypeError: can only concatenate str (not "int") to str
Updated code
while True:
try:
message = int(input("Enter a message you want to be decrypt: "))
break
except ValueError:
print("Error, it must be an integer")
secret_string = ""
for char in message:
secret_string += chr(ord(char - str(742146)))
print("Decrypted", secret_string)
q = input("")
Python working a bit differently to JavaScript for example, the value you are concatenating needs to be same type, both int or str...
So for example the code below throw an error:
print( "Alireza" + 1980)
like this:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
print( "Alireza" + 1980)
TypeError: can only concatenate str (not "int") to str
To solve the issue, just add str to your number or value like:
print( "Alireza" + str(1980))
And the result as:
Alireza1980
instead of using " + " operator
print( "Alireza" + 1980)
Use comma " , " operator
print( "Alireza" , 1980)
Use f-strings to resolve the TypeError
- f-Strings: A New and Improved Way to Format Strings in Python
- PEP 498 - Literal String Interpolation
# the following line causes a TypeError
# test = 'Here is a test that can be run' + 15 + 'times'
# same intent with a f-string
i = 15
test = f'Here is a test that can be run {i} times'
print(test)
# output
'Here is a test that can be run 15 times'
i = 15
# t = 'test' + i # will cause a TypeError
# should be
t = f'test{i}'
print(t)
# output
'test15'
- The issue may be attempting to evaluate an expression where a variable is the string of a numeric.
- Convert the string to an
int
. - This scenario is specific to this question
- When iterating, it's important to be aware of the
dtype
i = '15'
# t = 15 + i # will cause a TypeError
# convert the string to int
t = 15 + int(i)
print(t)
# output
30
Note
- The preceding part of the answer addresses the
TypeError
shown in the question title, which is why people seem to be coming to this question. - However, this doesn't resolve the issue in relation to the example provided by the OP, which is addressed below.
Original Code Issues
-
TypeError
is caused becausemessage
type is astr
. - The code iterates each character and attempts to add
char
, astr
type, to anint
- That issue can be resolved by converting
char
to anint
- As the code is presented,
secret_string
needs to be initialized with0
instead of""
. - The code also results in a
ValueError: chr() arg not in range(0x110000)
because7429146
is out of range forchr()
. - Resolved by using a smaller number
- The output is not a string, as was intended, which leads to the Updated Code in the question.
message = input("Enter a message you want to be revealed: ")
secret_string = 0
for char in message:
char = int(char)
value = char + 742146
secret_string += ord(chr(value))
print(f'\nRevealed: {secret_string}')
# Output
Enter a message you want to be revealed: 999
Revealed: 2226465
Updated Code Issues
-
message
is now anint
type, sofor char in message:
causesTypeError: 'int' object is not iterable
-
message
is converted toint
to make sure theinput
is anint
. - Set the type with
str()
- Only convert
value
to Unicode withchr
- Don't use
ord
while True:
try:
message = str(int(input("Enter a message you want to be decrypt: ")))
break
except ValueError:
print("Error, it must be an integer")
secret_string = ""
for char in message:
value = int(char) + 10000
secret_string += chr(value)
print("Decrypted", secret_string)
# output
Enter a message you want to be decrypt: 999
Decrypted ✙✙✙
Enter a message you want to be decrypt: 100
Decrypted ✑✐✐
Use this:
print("Program for calculating sum")
numbers=[1, 2, 3, 4, 5, 6, 7, 8]
sum=0
for number in numbers:
sum += number
print("Total Sum is: %d" %sum )
Problem is you are doing the following
str(chr(char + 7429146))
where char is a string. You cannot add a int with a string. this will cause that error
maybe if you want to get the ascii code and add it with a constant number. if so , you can just do ord(char) and add it to a number. but again, chr can take values between 0 and 1114112