I keep getting an error that says
AttributeError: 'NoneType' object has no attribute 'something'
The code I have is too long to post here. What general scenarios would cause this AttributeError
, what is NoneType
supposed to mean and how can I narrow down what's going on?
10 Answers
NoneType means that instead of an instance of whatever Class or Object you think you're working with, you've actually got None
. That usually means that an assignment or function call up above failed or returned an unexpected result.
You have a variable that is equal to None and you're attempting to access an attribute of it called 'something'.
foo = None foo.something = 1
or
foo = None print(foo.something)
Both will yield an AttributeError: 'NoneType'
Others have explained what NoneType
is and a common way of ending up with it (i.e., failure to return a value from a function).
Another common reason you have None
where you don't expect it is assignment of an in-place operation on a mutable object. For example:
mylist = mylist.sort()
The sort()
method of a list sorts the list in-place, that is, mylist
is modified. But the actual return value of the method is None
and not the list sorted. So you've just assigned None
to mylist
. If you next try to do, say, mylist.append(1)
Python will give you this error.
The NoneType
is the type of the value None
. In this case, the variable lifetime
has a value of None
.
A common way to have this happen is to call a function missing a return
.
There are an infinite number of other ways to set a variable to None, however.
1Consider the code below.
def return_something(someint): if someint > 5: return someint y = return_something(2) y.real()
This is going to give you the error
AttributeError: 'NoneType' object has no attribute 'real'
So points are as below.
It means the object you are trying to access None
. None
is a Null
variable in python. This type of error is occure de to your code is something like this.
x1 = None print(x1.something) #or x1 = None x1.someother = "Hellow world" #or x1 = None x1.some_func() # you can avoid some of these error by adding this kind of check if(x1 is not None): ... Do something here else: print("X1 variable is Null or None")
When building a estimator (sklearn), if you forget to return self in the fit function, you get the same error.
class ImputeLags(BaseEstimator, TransformerMixin): def __init__(self, columns): self.columns = columns def fit(self, x, y=None): """ do something """ def transfrom(self, x): return x
AttributeError: 'NoneType' object has no attribute 'transform'?
Adding return self
to the fit function fixes the error.
if val is not None: print(val) else: pass
check wheather particular data is not empty or null.
g.d.d.c. is right, but adding a very frequent example:
You might call this function in a recursive form. In that case, you might end up at null pointer or NoneType
. In that case, you can get this error. So before accessing an attribute of that parameter check if it's not NoneType
.
You can get this error with you have commented out HTML in a Flask application. Here the value for qual.date_expiry is None:
<!-- <td>{{ qual.date_expiry.date() }}</td> -->
Delete the line or fix it up:
<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>
ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJob3JsaWeCc3vWobBmnJ9itm6zxK1kmqykp7ajwdOenKuqn6d6r7vNnquyqJVivKO2xJyrZqCRqHqvu4yaq62qmZfCtbGMrKamnaSdtq%2Bz