关于python:不理解这个attributeError的含义

Don't understand what this AttributeError means

我一直有一个错误说

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

我的代码太长了,不能在这里发布,但是我想知道是否有人可以给出一个大概的场景会导致这个AttributeError,以及NoneType应该是什么意思?

通常,您会收到代码出错的某个对象的名称,但由于它给了我NoneType,我不知道如何缩小正在发生的事情,除了行号。


"非类型"意味着,您实际上已经得到了None,而不是您认为正在使用的任何类或对象的实例。这通常意味着上面的赋值或函数调用失败或返回了意外的结果。


您有一个等于"无"的变量,您正试图访问它的一个名为"something"的属性。

1
2
foo = None
foo.something = 1

1
2
foo = None
print foo.something

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


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

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

1
mylist = mylist.sort()

列表的sort()方法对列表进行排序,即修改mylist。但该方法的实际返回值是None,而不是排序的列表。所以你刚刚把None分配给mylist。如果您下一次尝试这样做,比如说,mylist.append(1)python将给出这个错误。


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

实现这一点的常见方法是调用缺少return的函数。

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


考虑下面的代码。

1
2
3
4
5
6
def return_something(someint):
 if  someint > 5:
    return someint

y = return_something(2)
y.real()

这会给你带来错误

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

所以要点如下。

  • 在代码中,函数或类方法没有返回任何内容或返回none
  • 然后,您尝试访问返回对象的属性(这是无),导致出现错误消息。

  • 它是指您试图访问的对象NoneNone是python中的Null变量。这种类型的错误发生在您的代码中,类似于这样。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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")


    G.D.D.C.是对的,但增加了一个非常常见的例子:

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