我一直有一个错误说
1
| AttributeError: 'NoneType' object has no attribute 'something' |
我的代码太长了,不能在这里发布,但是我想知道是否有人可以给出一个大概的场景会导致这个AttributeError,以及NoneType应该是什么意思?
通常,您会收到代码出错的某个对象的名称,但由于它给了我NoneType,我不知道如何缩小正在发生的事情,除了行号。
- 拿出演示问题的最小代码位。张贴。添加print函数(或取决于版本的语句),以显示存在此问题的代码中变量的实际值。
- "nonetype"表示类型=无。您可能正在尝试访问未声明的变量。你应该张贴一个要点,以便我们能帮助你。
- @Lo&239;cgrenon:"未声明的变量"?在Python?这没什么意义。如何声明变量?
- 基本上这意味着你在打电话给yourobject.babyruth之前先打了yourobject = somthing_that_is_None。可能something_that_is_None是返回None的函数。没有密码是不可能知道的。
- @s.lott如果变量未设置为值,则此值等于无。
- @Lo&239;cgrenon-在python中不是。您将得到一个"在分配前引用"异常。变量不默认为None。
- @Lo&239;cgrenon:您是否有一些代码可以演示您所谈论的这个想法?
"非类型"意味着,您实际上已经得到了None,而不是您认为正在使用的任何类或对象的实例。这通常意味着上面的赋值或函数调用失败或返回了意外的结果。
您有一个等于"无"的变量,您正试图访问它的一个名为"something"的属性。
1 2
| foo = None
foo.something = 1 |
或
1 2
| foo = None
print foo.something |
两者都将产生一个AttributeError: 'NoneType'。
- 在你指出人们可能最终会从某件事中得到一个None之前,这可能是没有用的。一个明确的foo = None不太可能是问题所在;它将是foo = something(),你不知道something()可能会在None不成功或结果集为空或其他什么时候返回。
其他人已经解释了NoneType是什么,以及结束它的一种常见方式(即,未能从函数返回值)。
另一个常见的原因是,您使用None,您不希望它是在可变对象上分配就地操作。例如:
列表的sort()方法对列表进行排序,即修改mylist。但该方法的实际返回值是None,而不是排序的列表。所以你刚刚把None分配给mylist。如果您下一次尝试这样做,比如说,mylist.append(1)python将给出这个错误。
NoneType是值None的类型。在这种情况下,变量lifetime的值为None。
实现这一点的常见方法是调用缺少return的函数。
但是,还有无数种其他方法可以将变量设置为"无"。
- 我不认为lifetime的值是None(预编辑)。他试图获取其他东西的终身属性,即None。
考虑下面的代码。
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
然后,您尝试访问返回对象的属性(这是无),导致出现错误消息。
它是指您试图访问的对象None。None是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。