380

我不断收到一条错误消息

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

我的代码太长,无法在此处发布。什么一般情况会导致这种情况AttributeErrorNoneType应该是什么意思,我怎样才能缩小正在发生的事情?

4

10 回答 10

370

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

于 2012-01-20T23:40:07.060 回答
126

您有一个等于 None 的变量,并且您正在尝试访问它的一个名为“某物”的属性。

foo = None
foo.something = 1

或者

foo = None
print(foo.something)

两者都会产生一个AttributeError: 'NoneType'

于 2012-01-20T23:40:51.437 回答
63

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

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

mylist = mylist.sort()

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

于 2012-01-21T00:20:36.917 回答
17

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

发生这种情况的一种常见方法是调用缺少return.

但是,还有无数其他方法可以将变量设置为 None。

于 2012-01-20T23:41:57.057 回答
15

考虑下面的代码。

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

y = return_something(2)
y.real()

这会给你错误

AttributeError:“NoneType”对象没有“真实”属性

所以要点如下。

  1. 在代码中,函数或类方法不返回任何内容或返回 None
  2. 然后您尝试访问该返回对象的属性(即无),从而导致错误消息。
于 2017-04-10T05:32:55.687 回答
4

在构建估计器(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 函数可以修复错误。

于 2020-01-29T15:56:40.260 回答
3

这意味着您尝试访问的对象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")
于 2019-03-03T09:08:22.893 回答
2
if val is not None:
    print(val)
else:
    pass

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

于 2020-12-21T12:52:21.537 回答
1

gddc 是对的,但添加了一个非常常见的示例:

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

于 2019-02-19T04:42:43.700 回答
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>
于 2019-10-23T10:37:05.463 回答