Casa > O > O Que Faz 'Erro: Só Pode Concatenar Str (Não "Int") A Str' Significar Em Python?

O que faz 'Erro: Só pode concatenar str (não "int") a str' significar em Python?

Em uma mão, acho que sei o que a mensagem de erro está a tentar dizer-lhe. Mas por outro lado, em algumas tentativas, eu não fui capaz de provocar exatamente aquela mensagem.

Como explicado em outras respostas à sua pergunta, o operador "+" em Python significa adicionar quando aplicado a valores do tipo numérico como inteiros, e aquele mesmo operador "+" significa concatenação quando aplicado a valores do tipo string, mas Python não define o operador "+" para o caso de tentar aplicar aquela operação onde um operando é um valor string e o outro operando é um valor inteiro. Note que mesmo que o valor da string seja um valor que consiste apenas de dígitos, então o valor da string poderia ser convertido para um valor inteiro, Python não fará implicitamente essa conversão do tipo string para o tipo int para você. Se você quiser fazer essa conversão, você teria que pedir explicitamente a conversão em seu código. Converter uma string para um int é uma operação que pode muito bem falhar em tempo de execução, então presumivelmente, se você pedir para que tal conversão aconteça, ou você validou o valor da string para garantir que a conversão será bem sucedida, ou você embrulha a tentativa em uma "tentativa...exceto" que você codificou para lidar graciosamente com o possível erro de conversão.

Mas aqui está o que aconteceu quando eu tentei algum código real para mostrar do que estou falando. A versão exata de python que você está usando importa e você não disse qual versão você está usando. So, I’ve got “python” (2.7.16) and I’ve also got “python3” (3.6.9)

  1. drew@drews-desktop ~/python 
  2. $ python -V 
  3. Python 2.7.16 
  4.  
  5. drew@drews-desktop ~/python 
  6. $ python3 -V 
  7. Python 3.6.9 

So I used vi to create a file named “concat.py” with this little test program in it:

  1. x="A string value. " 
  2. y="Another String value" 
  3. print ("type(x)=", type(x)) 
  4. impressão ("type(y)=", type(y)) 
  5. print ("x+y=", x+y) 
  6. z=42 
  7. print ("type(z)=", type(z)) 
  8. print ("x+z=", x+z) 
  9. exit() 

But when I tried the test program with Python 3, I didn’t get your exact error message.

  1. drew@drews-desktop ~/python 
  2. $ python3 concat.py 
  3. type(x)=  
  4. type(y)=  
  5. x+y= A string value. Another String value 
  6. type(z)=  
  7. Traceback (most recent call last): 
  8. File "concat.py", line 8, in  
  9. print ("x+z=", x+z) 
  10. TypeError: must be str, not int 

Behavior wasn’t exactly the same with the same program and Python 2

  1. drew@drews-desktop ~/python 
  2. $ python concat.py 
  3. ('type(x)=', ) 
  4. ('type(y)=', ) 
  5. ('x+y=', 'A string value. Another String value') 
  6. ('type(z)=', ) 
  7. Traceback (most recent call last): 
  8. File "concat.py", line 8, in  
  9. print ("x+z=", x+z) 
  10. 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.

  1. ... 
  2. Traceback (most recent call last): 
  3. File "concat.py", line 8, in  
  4. print("z+x=", z+x) 
  5. 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. Em geral, deve ter o cuidado de especificar o seu ambiente e ser específico sobre a versão do Python que está a usar. Por exemplo, estou a usar o Windows 10 e uma instalação Cygwin actual do Python e estou a usar a shell bash. Para fazer uma pergunta sobre o código Python, você precisa preservar o espaço em branco. Eu já fiz isso aqui usando a opção de formatação quora "código". Uma alternativa seria publicar seu código em uma página web http://pastebin.com (tal página é conhecida como uma "pasta") e compartilhar a URL da "pasta" em sua pergunta Quora.

Descrutando seu problema até uma simples amostra de código Python que demonstra seu caso de problema de uma maneira reprodutível, também pode ser útil para ajudá-lo a entender o contexto da mensagem de erro que está confundindo você. Tenha o cuidado de retirar a sua amostra de qualquer coisa que o seu empregador possa considerar ser informação proprietária.

Eu sei que não respondi exactamente à sua pergunta aqui, mas espero que tenha uma ideia geral do que o Python está a tentar dizer-lhe com essa mensagem. E espero especialmente ter ajudado você a entender como fazer tais perguntas. Obrigado pelo A2A.

De Marigolde Peterkin

Qual deles é um melhor chipset entre o Snapdragon 720G e o Helio G90T? :: Porque é que a frequência 432 Hz foi alterada para 440 em 1932?