J'obtiens cette erreur lorsque j'exécute mon script python:
TypeError: cannot concatenate 'str' and 'NoneType' objects
Je suis presque sûr que le «str» signifie une chaîne, mais je ne sais pas ce qu'est un objet «NoneType». Mon script craque sur la deuxième ligne, je sais que la première fonctionne parce que les commandes de cette ligne sont dans mon asa comme je m'y attendais. Au début, j'ai pensé que c'était peut-être parce que j'utilise des variables et des entrées utilisateur dans send_command.
Tout dans 'CAPS' sont des variables, tout dans 'minuscules' est entré à partir des options 'parser.add_option'.
J'utilise pexpect et optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
NoneType
est le type de la valeur singletonNone
. L'une de vos valeurs n'est pas une chaîne.str()
str (SNMPSRVUSRCMD) + str (snmpuser) + ...Réponses:
NoneType
est le type de l'None
objet, qui est un objet qui n'indique aucune valeur .None
est la valeur de retour des fonctions qui "ne renvoient rien". C'est également une valeur de retour par défaut courante pour les fonctions qui recherchent quelque chose et peuvent ou non le trouver; par exemple, il est renvoyére.search
lorsque l'expression régulière ne correspond pas oudict.get
lorsque la clé n'a pas d'entrée dans le dict. Vous ne pouvez pas ajouterNone
à des chaînes ou à d'autres objets.L'une de vos variables n'est
None
pas une chaîne. Peut-être que vous avez oubliéreturn
dans l'une de vos fonctions, ou peut-être que l'utilisateur n'a pas fourni d'option de ligne de commande etoptparse
vous a donnéNone
la valeur de cette option. Lorsque vous essayez d'ajouterNone
à une chaîne, vous obtenez cette exception:L'un de
group
ouSNMPGROUPCMD
ouV3PRIVCMD
aNone
pour valeur.la source
NameError
. Il pourrait également être défini, mais égal àNone
("set to Nothing" = "not set"?), Alors vous pourriez en obtenirTypeError
.NoneType
est simplement le type duNone
singleton:>>> type(None) <type 'NoneType'>
À partir du dernier lien ci-dessus:
Dans votre cas, il semble que l'un des éléments que vous essayez de concaténer soit
None
, d'où votre erreur.la source
Pour des raisons de programmation défensive, les objets doivent être vérifiés contre la nullité avant utilisation.
if obj is None:
ou
if obj is not None:
la source
Cela signifie que vous essayez de concaténer une chaîne avec quelque chose qui est
None
.Aucun est le "nul" de Python et
NoneType
est son type.Ce code soulèvera le même type d'erreur:
>>> bar = "something" >>> foo = None >>> print foo + bar TypeError: cannot concatenate 'str' and 'NoneType' objects
la source
En Python, pour représenter l'absence de valeur, vous pouvez utiliser la
None
valeurtypes.NoneType.None
la source
Dans le message d'erreur, au lieu de vous dire que vous ne pouvez pas concaténer deux objets en affichant leurs valeurs (une chaîne et
None
dans cet exemple), l'interpréteur Python vous le dit en montrant les types des objets que vous avez essayé de concaténer. Le type de chaque chaîne eststr
alors que le type de l'None
instance unique est appeléNoneType
.Vous n'avez normalement pas besoin de vous préoccuper
NoneType
, mais dans cet exemple, il est nécessaire de le savoirtype(None) == NoneType
.la source
>>> 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'est défini nulle part (à ma connaissance). Si vous voulez vérifier si une valeur estNone
, utilisez simplementkey is None
(voir stackoverflow.com/questions/23086383/… ). Sinon, vous pourriez utilisertype(key) == type(None)
le même effet.Votre erreur se produit en raison de quelque chose comme ceci:
>>> None + "hello world"
>>>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
L' objet None de Python est à peu près équivalent à null , nil , etc. dans d'autres langages.
la source
Aucune valeur n'a été attribuée à l'une des variables, il s'agit donc d'un NoneType. Vous devrez vous demander pourquoi, c'est probablement une simple erreur de logique de votre part.
la source
Un non-type est le type d'un None.
Consultez la documentation ici: https://docs.python.org/2/library/types.html#types.NoneType
la source