为什么我得到AttributeError: '对象没有属性'something'?

我一直得到一个错误,说

AttributeError: 'NoneType' object has no attribute 'something'

我的代码太长了,不能在这里发布。什么一般情况下会导致这个AttributeErrorNoneType应该是什么意思,我如何缩小正在发生的事情?

1517907 次浏览

NoneType意味着不是你认为你正在处理的任何类或对象的实例,你实际上得到了None。这通常意味着上面的赋值或函数调用失败或返回意外结果。

你有一个等于None的变量,你试图访问它的一个名为“something”的属性。

foo = None
foo.something = 1

foo = None
print(foo.something)

两者都将产生AttributeError: 'NoneType'

NoneType是值None的类型。在本例中,变量lifetime的值为None

实现这种情况的常见方法是调用缺少return的函数。

然而,还有无数种其他方法可以将变量设置为None。

其他人解释了NoneType是什么,以及以它结束的常见方式(即,无法从函数返回值)。

另一个常见的原因是你不期望None是对可变对象的就地操作赋值。例如:

mylist = mylist.sort()

列表的sort()方法对列表进行就地排序,也就是说,mylist被修改。但该方法的实际返回值是None,而不是已排序的列表。这样你就把None赋值给了mylist。如果你下次尝试这样做,比如说,mylist.append(1) Python会给你这个错误。

考虑下面的代码。

def return_something(someint):
if  someint > 5:
return someint


y = return_something(2)
y.real()

这就会给出误差

AttributeError: 'NoneType'对象没有'real'属性

点如下所示。

  1. 在代码中,函数或类方法不返回任何东西或返回None
  2. 然后,您尝试访问该返回对象的属性(该属性为None),从而导致错误消息。

gdc是对的,但加上了一个非常常见的例子:

您可以以递归形式调用此函数。在这种情况下,你可能会得到空指针或NoneType。在这种情况下,您可以得到这个错误。因此,在访问该参数的属性之前,检查它是否不是NoneType

它表示你要访问的对象NoneNone是python中的Null变量。 这种类型的错误发生在你的代码是这样的

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")

如果在Flask应用程序中注释掉HTML,就会出现这个错误。这里qual.date_expiry的值是None:

   <!-- <td>\{\{ qual.date_expiry.date() }}</td> -->

删除或修复这一行:

<td>{% if qual.date_attained != None %} \{\{ qual.date_attained.date() }} {% endif %} </td>

在构建估计器(sklearn)时,如果您忘记在fit函数中返回self,则会得到相同的错误。

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”对象没有属性“转换”?

return self添加到fit函数中可以修复此错误。

if val is not None:
print(val)
else:
# no need for else: really if it doesn't contain anything useful
pass

检查特定数据是否为空或空。

这里没有一个答案是正确的。我有这样一个场景:

def my_method():
if condition == 'whatever':
....
return 'something'
else:
return None


answer = my_method()


if answer == None:
print('Empty')
else:
print('Not empty')

错误如下:

File "/usr/local/lib/python3.9/site-packages/gitlab/base.py", line 105, in __eq__
if self.get_id() and other.get_id():
AttributeError: 'NoneType' object has no attribute 'get_id'

在这种情况下,你不能用==测试是否等于None。为了解决这个问题,我将其改为使用is:

if answer is None:
print('Empty')
else:
print('Not empty')