Ich erhalte diese Fehlermeldung, wenn ich mein Python-Skript ausführe:
TypeError: cannot concatenate 'str' and 'NoneType' objects
Ich bin mir ziemlich sicher, dass 'str' string bedeutet, aber ich weiß nicht, was ein 'NoneType'-Objekt ist. Mein Skript geht in der zweiten Zeile aus, ich weiß, dass das erste funktioniert, weil die Befehle aus dieser Zeile in meiner ASA sind, wie ich es erwarten würde. Zuerst dachte ich, es könnte daran liegen, dass ich Variablen und Benutzereingaben in send_command verwende.
Alles in 'CAPS' sind Variablen, alles in 'Kleinbuchstaben' wird über die Optionen 'parser.add_option' eingegeben.
Ich benutze pexpect und optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
NoneType
ist der Typ des Singleton-WertsNone
. Einer Ihrer Werte ist keine Zeichenfolge.str()
Setzen Sie jeden Begriff in str (SNMPSRVUSRCMD) + str (snmpuser) + ...Antworten:
NoneType
ist der Typ für dasNone
Objekt, bei dem es sich um ein Objekt handelt, das keinen Wert angibt .None
ist der Rückgabewert von Funktionen, die "nichts zurückgeben". Es ist auch ein allgemeiner Standardrückgabewert für Funktionen, die nach etwas suchen und es möglicherweise finden oder nicht finden. Beispielsweise wird es zurückgegeben,re.search
wenn der reguläre Ausdruck nicht übereinstimmt oderdict.get
wenn der Schlüssel keinen Eintrag im Diktat hat. Sie können keineNone
Zeichenfolgen oder andere Objekte hinzufügen .Eine Ihrer Variablen ist
None
keine Zeichenfolge. Vielleicht haben Siereturn
in einer Ihrer Funktionen vergessen , oder der Benutzer hat keine Befehlszeilenoption angegeben undoptparse
SieNone
für den Wert dieser Option angegeben. Wenn Sie versuchen,None
einer Zeichenfolge etwas hinzuzufügen , wird folgende Ausnahme angezeigt:Einer von
group
oderSNMPGROUPCMD
oderV3PRIVCMD
hatNone
als Wert.quelle
NameError
. Es könnte auch gesetzt werden, aber gleichNone
("auf nichts setzen" = "nicht gesetzt"?), Dann könnten Sie einige bekommenTypeError
.NoneType
ist einfach der Typ desNone
Singletons:>>> type(None) <type 'NoneType'>
Aus dem letzteren Link oben:
In Ihrem Fall sieht es so aus, als ob eines der Elemente, die Sie verketten möchten
None
, der Fehler ist.quelle
Aus Gründen der defensiven Programmierung sollten Objekte vor der Verwendung auf Null geprüft werden.
if obj is None:
oder
if obj is not None:
quelle
Es bedeutet, dass Sie versuchen, eine Zeichenfolge mit etwas zu verketten, das ist
None
.Keine ist die "Null" von Python und
NoneType
ist sein Typ.Dieser Code löst die gleiche Art von Fehler aus:
>>> bar = "something" >>> foo = None >>> print foo + bar TypeError: cannot concatenate 'str' and 'NoneType' objects
quelle
In Python können Sie den
None
Wert verwenden , um das Fehlen eines Werts darzustellentypes.NoneType.None
quelle
Anstatt Ihnen in der Fehlermeldung mitzuteilen, dass Sie zwei Objekte nicht verketten können, indem Sie ihre Werte anzeigen (eine Zeichenfolge und
None
in diesem Beispiel), zeigt Ihnen der Python-Interpreter dies an, indem er die Typen der Objekte anzeigt, die Sie verketten wollten. Der Typ jeder Zeichenfolge ist,str
während der Typ der einzelnenNone
Instanz aufgerufen wirdNoneType
.Normalerweise müssen Sie sich nicht darum kümmern
NoneType
, aber in diesem Beispiel ist es notwendig, das zu wissentype(None) == NoneType
.quelle
>>> 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
ist nirgendwo definiert (das ist mir bekannt). Wenn Sie überprüfen möchten, ob ein Wert vorliegtNone
, verwenden Sie einfachkey is None
(siehe stackoverflow.com/questions/23086383/… ). Andernfalls könnten Sietype(key) == type(None)
den gleichen Effekt erzielen.Ihr Fehler tritt folgendermaßen auf: >>>
>>> None + "hello world"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Das None- Objekt von Python entspricht in anderen Sprachen in etwa null , null usw.
quelle
Einer der Variablen wurde kein Wert zugewiesen, daher handelt es sich um einen NoneType. Sie müssen untersuchen, warum dies so ist, es ist wahrscheinlich ein einfacher logischer Fehler von Ihrer Seite.
quelle
Ein Nicht-Typ ist der Typ eines Keine.
Siehe die Dokumente hier: https://docs.python.org/2/library/types.html#types.NoneType
quelle