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

时间:2012-01-20 23:38:01

标签: python attributeerror nonetype

我一直收到错误消息

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

我的代码太长了,无法在此发布。哪些一般情况会导致AttributeErrorNoneType应该是什么意思,我该如何缩小正在发生的事情呢?

11 个答案:

答案 0 :(得分:228)

NoneType意味着您实际上只有None而不是您认为正在使用的任何类或对象的实例。这通常意味着上面的赋值或函数调用失败或返回意外结果。

答案 1 :(得分:89)

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

foo = None
foo.something = 1

foo = None
print foo.something

两者都会产生AttributeError: 'NoneType'

答案 2 :(得分:39)

其他人已经解释了NoneType是什么以及结束它的常用方法(即,未能从函数返回值)。

您不期望None的另一个常见原因是在可变对象上分配就地操作。例如:

mylist = mylist.sort()

列表的sort()方法就地对列表进行排序,即mylist被修改。但该方法的实际返回值为None,而不是已排序的列表。因此,您刚刚将None分配给mylist。如果你接下来尝试做,比如说,mylist.append(1) Python会给你这个错误。

答案 3 :(得分:14)

NoneType是值None的类型。在这种情况下,变量lifetime的值为None

实现此目的的常见方法是调用缺少return的函数。

然而,有许多其他方法可以将变量设置为None。

答案 4 :(得分:11)

请考虑以下代码。

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

y = return_something(2)
y.real()

这会给你错误

  

AttributeError:' NoneType'对象没有属性'真实'

所以点数如下。

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

答案 5 :(得分:2)

这意味着您尝试访问的对象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")

答案 6 :(得分:2)

在构建估算器(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”对象没有属性“ transform”吗?

return self添加到fit函数可修复该错误。

答案 7 :(得分:1)

if val is not None:
    print(val)
else:
    pass

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

答案 8 :(得分:0)

g.d.d.c。是正确的,但添加了一个非常常见的示例:

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

答案 9 :(得分:0)

在Flask应用程序中注释掉HTML时,可能会出现此错误。这里qual.date_expiry的值为None:

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

删除该行或进行修复:

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

答案 10 :(得分:-1)

如果我们分配如下所示的内容,则会抛出错误,因为“ AttributeError:'NoneType'对象没有属性'show'”

'B', 'C', 'D'