Cosa significa 'Errore: Può solo concatenare str (non "int") a str' significa in Python?
Da un lato, penso di sapere cosa sta cercando di dire il messaggio di errore. Ma d'altra parte, in un paio di tentativi, non sono riuscito a provocare esattamente quel messaggio.
Come spiegato in altre risposte alla tua domanda, l'operatore "+" in Python significa aggiungere quando viene applicato a valori di tipo numerico come i numeri interi, e quello stesso operatore "+" significa concatenare quando viene applicato a valori di tipo stringa, ma Python non definisce l'operatore "+" per il caso in cui si cerchi di applicare quell'operazione dove un operando è un valore stringa e l'altro operando è un valore intero. Notate che anche se il valore della stringa è un valore che consiste solo di cifre, quindi il valore della stringa potrebbe essere convertito in un valore intero, Python non farà implicitamente quella conversione dal tipo stringa al tipo int per voi. Se volete fare quella conversione, dovrete chiedere esplicitamente la conversione nel vostro codice. Convertire una stringa in un int è un'operazione che può benissimo fallire in fase di esecuzione, quindi presumibilmente, se chiedete che tale conversione avvenga, o avete convalidato il valore della stringa per assicurare che la conversione abbia successo, o avvolgete il tentativo in un "try...except" che avete codificato per gestire con grazia il possibile errore di conversione.
Ma ecco cosa è successo quando ho provato del codice reale per mostrare di cosa sto parlando. La versione esatta di python che state usando è importante e non avete detto quale versione state usando. So, I’ve got “python” (2.7.16) and I’ve also got “python3” (3.6.9)
- drew@drews-desktop ~/python
- $ python -V
- Python 2.7.16
- drew@drews-desktop ~/python
- $ python3 -V
- Python 3.6.9
So I used vi to create a file named “concat.py” with this little test program in it:
- x="A string value. "
- y="Another String value"
- print ("type(x)=", type(x))
- print ("type(y)=", type(y))
- print ("x+y=", x+y)
- z=42
- print ("type(z)=", type(z))
- print ("x+z=", x+z)
- exit()
But when I tried the test program with Python 3, I didn’t get your exact error message.
- drew@drews-desktop ~/python
- $ python3 concat.py
- type(x)=
- type(y)=
- x+y= A string value. Another String value
- type(z)=
- Traceback (most recent call last):
- File "concat.py", line 8, in
- print ("x+z=", x+z)
- TypeError: must be str, not int
Behavior wasn’t exactly the same with the same program and Python 2
- drew@drews-desktop ~/python
- $ python concat.py
- ('type(x)=', )
- ('type(y)=', )
- ('x+y=', 'A string value. Another String value')
- ('type(z)=', )
- Traceback (most recent call last):
- File "concat.py", line 8, in
- print ("x+z=", x+z)
- TypeError: cannot concatenate 'str' and 'int' objects
Closer to your error message, but still not an exact match.
So, just to see what happens, I changed x+z to z+x in line 8 of the test program.
- ...
- Traceback (most recent call last):
- File "concat.py", line 8, in
- print("z+x=", z+x)
- TypeError: unsupported operand type(s) for +: 'int' and 'str'
So, stilll not an exact match to the error message you asked about. Surprisingly, I got the same message that I’ve shown from both python and python3.
I conclude that you really need to refine your question if you want a more specific answer. In generale, dovresti fare attenzione a specificare il tuo ambiente ed essere specifico sulla versione di Python che stai usando. Ad esempio, sto usando Windows 10 e un'installazione Cygwin corrente di Python e sto usando la shell bash. Per fare una domanda sul codice Python, è necessario preservare lo spazio bianco. L'ho fatto qui usando l'opzione di formattazione "codice" di Quora. Un'alternativa sarebbe quella di postare il vostro codice in una pagina web http://pastebin.com (una tale pagina è conosciuta come "paste") e condividere l'URL della "paste" nella vostra domanda su Quora.
Distillare il vostro problema in un semplice esempio di codice Python che dimostri il vostro caso problematico in modo riproducibile, può anche essere utile per aiutarvi a capire il contesto del messaggio di errore che vi lascia perplessi. Fate attenzione a spogliare il vostro campione di qualsiasi cosa che il vostro datore di lavoro potrebbe considerare informazioni proprietarie.
So di non aver risposto esattamente alla vostra domanda qui, ma spero che abbiate un'idea generale di ciò che Python sta cercando di dirvi con quel messaggio. E spero soprattutto di averti aiutato a capire come fare meglio queste domande. Grazie per l'A2A.