[Solved] What is a ‘NoneType’ object?
I’m getting this error when I run my python script:
TypeError: cannot concatenate 'str' and 'NoneType' objects
I’m pretty sure the ‘str’ means string, but I dont know what a ‘NoneType’ object is. My script craps out on the second line, I know the first one works because the commands from that line are in my asa as I would expect. At first I thought it may be because I’m using variables and user input inside send_command.
Everything in ‘CAPS’ are variables, everything in ‘lower case’ is input from ‘parser.add_option’ options.
I’m using pexpect, and optparse
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD) send_command(child, SNMPSRVUSRCMD + snmpuser + group + V3AUTHCMD + snmphmac + snmpauth + PRIVCMD + snmpencrypt + snmppriv)
NoneType is the type for the
None object, which is an object that indicates no value.
None is the return value of functions that “don’t return anything”. It is also a common default return value for functions that search for something and may or may not find it; for example, it’s returned by
re.search when the regex doesn’t match, or
dict.get when the key has no entry in the dict. You cannot add
None to strings or other objects.
One of your variables is
None, not a string. Maybe you forgot to
return in one of your functions, or maybe the user didn’t provide a command-line option and
optparse gave you
None for that option’s value. When you try to add
None to a string, you get that exception:
send_command(child, SNMPGROUPCMD + group + V3PRIVCMD)
None as its value.
type(None) <type 'NoneType'>
From the latter link above:
The sole value of the type
Noneis frequently used to represent the absence of a value, as when default arguments are not passed to a function. Assignments to
Noneare illegal and raise a
In your case, it looks like one of the items you are trying to concatenate is
None, hence your error.
For the sake of defensive programming, objects should be checked against nullity before using.
if obj is None:
if obj is not None:
It means you’re trying to concatenate a string with something that is
None is the “null” of Python, and
NoneType is its type.
This code will raise the same kind of error:
"something" foo = None print foo + bar TypeError: cannot concatenate 'str' and 'NoneType' objectsbar =
In Python, to represent the absence of a value, you can use the
In the error message, instead of telling you that you can’t concatenate two objects by showing their values (a string and
None in this example), the Python interpreter tells you this by showing the types of the objects that you tried to concatenate. The type of every string is
str while the type of the single
None instance is called
You normally do not need to concern yourself with
NoneType, but in this example it is necessary to know that
type(None) == NoneType.
Your error’s occurring due to something like this:
>>> 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 None object is roughly equivalent to null, nil, etc. in other languages.
One of the variables has not been given any value, thus it is a NoneType. You’ll have to look into why this is, it’s probably a simple logic error on your part.
A nonetype is the type of a None.
See the docs here: