Estou recebendo este erro quando executo meu script Python:
TypeError: cannot concatenate 'str' and 'NoneType' objects
Tenho certeza de que 'str' significa string, mas não sei o que é um objeto 'NoneType'. Meu script caga na segunda linha, eu sei que a primeira funciona porque os comandos daquela linha estão na minha asa como eu esperava. A princípio pensei que poderia ser porque estou usando variáveis e entrada do usuário dentro de send_command.
Tudo em 'CAPS' são variáveis, tudo em 'minúsculas' é inserido nas opções de 'parser.add_option'.
Estou usando o pexpect e optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
NoneType
é o tipo de valor singletonNone
. Um dos seus valores não é uma string.str()
str (SNMPSRVUSRCMD) + str (snmpuser) + ...Respostas:
NoneType
é o tipo doNone
objeto, que é um objeto que não indica nenhum valor .None
é o valor de retorno de funções que "não retornam nada". É também um valor de retorno padrão comum para funções que procuram algo e podem ou não encontrá-lo; por exemplo, ele é retornadore.search
quando a regex não corresponde oudict.get
quando a chave não tem entrada no dict. Você não pode adicionarNone
strings ou outros objetos.Uma de suas variáveis é
None
, não uma string. Talvez você tenha esquecidoreturn
em uma de suas funções ou talvez o usuário não forneceu uma opção de linha de comando eoptparse
forneceuNone
o valor dessa opção. Ao tentar adicionarNone
a uma string, você obtém a exceção:Um de
group
ouSNMPGROUPCMD
ouV3PRIVCMD
temNone
como valor.fonte
NameError
. Também pode ser definido, mas igual aNone
("definido como nada" = "não definido"?), Então você pode obter algunsTypeError
.NoneType
é simplesmente o tipo deNone
singleton:>>> type(None) <type 'NoneType'>
Do último link acima:
No seu caso, parece que um dos itens que você está tentando concatenar é
None
, daí o seu erro.fonte
Para fins de programação defensiva, os objetos devem ser verificados em relação à nulidade antes de usar.
if obj is None:
ou
if obj is not None:
fonte
Isso significa que você está tentando concatenar uma string com algo que é
None
.Nenhum é o "nulo" de Python e
NoneType
é seu tipo.Este código gerará o mesmo tipo de erro:
>>> bar = "something" >>> foo = None >>> print foo + bar TypeError: cannot concatenate 'str' and 'NoneType' objects
fonte
Em Python, para representar a ausência de um valor, você pode usar o
None
valortypes.NoneType.None
fonte
Na mensagem de erro, em vez de dizer que você não pode concatenar dois objetos mostrando seus valores (uma string e
None
, neste exemplo), o interpretador Python informa isso mostrando os tipos de objetos que você tentou concatenar. O tipo de cada string éstr
enquanto o tipo da únicaNone
instância é chamadaNoneType
.Você normalmente não precisa se preocupar com
NoneType
, mas neste exemplo é necessário saber dissotype(None) == NoneType
.fonte
>>> type(key) <type 'NoneType'> >>> type(key) == NoneType Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'NoneType' is not defined
NoneType
não está definido em nenhum lugar (que eu saiba). Se você quiser verificar se um valor éNone
, basta usarkey is None
(consulte stackoverflow.com/questions/23086383/… ). Caso contrário, você pode usartype(key) == type(None)
para o mesmo efeito.Seu erro está ocorrendo devido a algo assim:
>>> None + "hello world"
>>>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Python's objeto None é aproximadamente equivalente a null , nil , etc. em outras linguagens.
fonte
Uma das variáveis não recebeu nenhum valor, portanto, é um NoneType. Você terá que descobrir o porquê disso, provavelmente é um erro de lógica simples de sua parte.
fonte
Um não-tipo é o tipo de Nenhum.
Veja a documentação aqui: https://docs.python.org/2/library/types.html#types.NoneType
fonte