Hoe TypeError op te lossen: kan alleen str (niet “int”) samenvoegen tot str

Pythonwerkt een beetje anders dan JavaScript, bijvoorbeeld, de waarde die u samenvoegt, moet van hetzelfde type zijn, zowel intals str. ..

Dus bijvoorbeeld de onderstaande code geeft een fout:

print( "Alireza" + 1980)

zoals dit:

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print( "Alireza" + 1980)
TypeError: can only concatenate str (not "int") to str

Om het probleem op te lossen, voegt u str toe aan uw getal of waarde, zoals:

print( "Alireza" + str(1980))

En het resultaat als:

Alireza1980

Antwoord 1, autoriteit 100%

in plaats van de operator ” + ” te gebruiken

print( "Alireza" + 1980)

Gebruik komma ” , ” operator

print( "Alireza" , 1980)

Antwoord 2, autoriteit 50%

Gebruik f-strings om de TypeError

op te lossen

# 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'
  • Het probleem is mogelijk een poging om een uitdrukking te evalueren waarbij een variabele de tekenreeks van een numeriek getal is.
  • Converteer de tekenreeks naar een int.
  • Dit scenario is specifiek voor deze vraag
  • Bij iteratie is het belangrijk om op de hoogte te zijn van het dtype
i = '15'
# t = 15 + i  # will cause a TypeError
# convert the string to int
t = 15 + int(i)
print(t)
# output
30

Opmerking

  • Het voorgaande deel van het antwoord gaat in op de TypeErrordie wordt weergegeven in de titel van de vraag, en daarom lijken mensen naar deze vraag te komen.
  • Dit lost echter niet het probleem op met betrekking tot het voorbeeld van het OP, dat hieronder wordt behandeld.

Problemen met originele code

  • TypeErrorwordt veroorzaakt omdat het type messageeen stris.
  • De code herhaalt elk teken en probeert char, een str-type, toe te voegen aan een int
  • Dat probleem kan worden opgelost door charte converteren naar een int
  • Terwijl de code wordt gepresenteerd, moet secret_stringworden geïnitialiseerd met 0in plaats van "".
  • De code resulteert ook in een ValueError: chr() arg not in range(0x110000)omdat 7429146buiten bereik is voor chr().
  • Opgelost door een kleiner getal te gebruiken
  • De uitvoer is geen string, zoals de bedoeling was, die leidt naar de geüpdatete code in de vraag.
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

Problemen met geüpdatete code

  • messageis nu een inttype, dus for char in message:veroorzaakt TypeError: 'int' object is not iterable
  • messagewordt geconverteerd naar intom ervoor te zorgen dat de inputeen intis.
  • Stel het type in met str()
  • Zet valuealleen om naar Unicode met chr
  • Gebruik ordniet
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 ✑✐✐

Antwoord 3, Autoriteit 14%

Wijzig secret_string += str(chr(char + 7429146))

Naar secret_string += chr(ord(char) + 7429146)

ord()Converteert het karakter naar zijn Unicode-integer-equivalent. chr()Converteert vervolgens dit gehele getal in zijn Unicode-karakter-equivalent.

Ook, 7429146 is te groot van een getal, het moet minder zijn dan 1114111


Antwoord 4, Autoriteit 14%

Gebruik dit:

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 )

Antwoord 5, Autoriteit 7%

Probleem is dat u het volgende doet

str(chr(char + 7429146))

waar Char een touwtje is. Je kunt geen int toevoegen met een touwtje. Dit veroorzaakt die fout

Misschien als u de ASCII-code wilt krijgen en deze toevoegen met een constant nummer. Zo ja, kunt u gewoon ord (char) doen en toevoegen aan een nummer. Maar nogmaals, ChR kan waarden tussen 0 en 1114112

Other episodes