不明白这个AttributeError的含义

Jac*_*fin 263 python attributeerror nonetype

我不断收到错误消息

AttributeError: 'NoneType' object has no attribute 'something'
Run Code Online (Sandbox Code Playgroud)

我所拥有的代码太长了,无法在此发布,但我想知道是否有人可以给出一般情况会导致这种情况的要点AttributeError,以及这NoneType应该是什么意思?

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

g.d*_*d.c 258

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

  • 记住从函数调用中实际“返回”也很有帮助......尝试引用未返回的项目通常效果不太好。愚蠢的我。 (3认同)

kob*_*las 100

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

foo = None
foo.something = 1
Run Code Online (Sandbox Code Playgroud)

要么

foo = None
print foo.something
Run Code Online (Sandbox Code Playgroud)

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

  • 除非您指出人们最终可能会从中得到“ None”,否则这可能无济于事。一个显式的“ foo = None”可能不是问题。它将会是`foo = something()`,并且您没有意识到`something()`在不成功或结果集为空或任何其他值时可能会返回“ None”。 (4认同)

kin*_*all 46

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

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

mylist = mylist.sort()
Run Code Online (Sandbox Code Playgroud)

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


S.L*_*ott 16

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

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

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


PHI*_*OUS 12

请考虑以下代码.

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

y = return_something(2)
y.real()
Run Code Online (Sandbox Code Playgroud)

这会给你错误

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

所以要点如下.

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


小智 7

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

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