为什么我会收到 AttributeError:“NoneType”对象没有属性“something”?
- 2024-11-18 08:41:00
- admin 原创
- 11
问题描述:
我收到一条错误消息,提示
AttributeError: 'NoneType' object has no attribute 'something'
我该如何理解这个信息?
哪些一般情况可能导致这种情况AttributeError
?我该如何识别问题?
这是 s 的一个特殊情况AttributeError
。它值得单独处理,因为有很多方法可以None
从代码中获取意外值,因此这通常是不同的问题;对于其他AttributeError
s,问题可能只是属性名称。
另请参阅什么是 None 值?和什么是“NoneType”对象?以了解None
其类型NoneType
。
解决方案 1:
NoneType 意味着您实际上得到的不是您认为正在使用的任何类或对象的实例None
。这通常意味着上面的赋值或函数调用失败或返回了意外结果。
解决方案 2:
您有一个等于 None 的变量,并且您正尝试访问它的一个名为“某物”的属性。
foo = None
foo.something = 1
或者
foo = None
print(foo.something)
两者都将产生AttributeError: 'NoneType'
解决方案 3:
是NoneType
值的类型None
。在本例中,变量lifetime
的值为None
。
发生这种情况的常见方式是调用缺少的函数return
。
然而,有无数其他方法可以将变量设置为 None。
解决方案 4:
考虑下面的代码。
def return_something(someint):
if someint > 5:
return someint
y = return_something(2)
y.real()
这会给你错误
AttributeError:'NoneType'对象没有属性'real'
因此要点如下。
在代码中,函数或类方法不返回任何内容或返回 None
然后您尝试访问该返回对象的属性(为 None),从而导致错误消息。
解决方案 5:
if val is not None:
print(val)
else:
# no need for else: really if it doesn't contain anything useful
pass
检查特定数据是否不为空或为空。
解决方案 6:
这意味着您尝试访问的对象None
。None
是Null
Python 中的一个变量。这种类型的错误是由于您的代码类似以下情况而发生的。
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")
解决方案 7:
另一个常见的原因None
是错误地将方法的返回值分配给所操作的对象。
numbers = [2, 3, 4, 0, 42, 17]
numbers = numbers.sort() # error!
numbers.append(10000000)
这里的问题是该.sort
方法修改了列表,并返回None
。您想要
numbers.sort()
或者
numbers = numbers.sorted()
(在这种情况下,可能应该优先考虑前者。)
还有几种具有类似签名的方法。 sort
这是一种常见的方法,但它只是其中一个例子。
有一个获得相当多赞同的答案,其中包含此信息,但作者将其删除。我添加了一个新答案,以使讨论保持合理完整。
解决方案 8:
当构建估计器(sklearn)时,如果您忘记在 fit 函数中返回自身,则会收到相同的错误。
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
适合函数可修复该错误。
解决方案 9:
该错误意味着您尝试访问 的属性或方法None
,但NoneType
没有任何属性或方法。当您调用不返回任何内容的函数时,可能会发生这种情况,这会导致其返回值为None
。示例:
>>> exec("'FOO'").lower()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'lower'
发生这种情况是因为内置函数exec
没有返回值,而我们正尝试调用 lower 方法None
。
解决方案 10:
gddc 是正确的,但添加一个非常常见的例子:
您可能以递归形式调用此函数。在这种情况下,您可能会得到空指针或NoneType
。在这种情况下,您可能会收到此错误。因此,在访问该参数的属性之前,请检查它是否不是NoneType
。
解决方案 11:
这里的其他答案都没有给我正确的解决方案。我遇到了这种情况:
def my_method():
if condition == 'whatever':
....
return 'something'
else:
return None
answer = my_method()
if answer == None:
print('Empty')
else:
print('Not empty')
出现错误:
File "/usr/local/lib/python3.9/site-packages/gitlab/base.py", line 105, in __eq__
if self.get_id() and other.get_id():
AttributeError: 'NoneType' object has no attribute 'get_id'
在这种情况下,您无法使用 来测试是否相等None
。==
为了解决这个问题,我将其改为使用is
:
if answer is None:
print('Empty')
else:
print('Not empty')
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件