Python 为什么我会得到AttributeError:';非类型';对象没有属性';什么';?
我一直收到一个错误,上面写着Python 为什么我会得到AttributeError:';非类型';对象没有属性';什么';?,python,attributeerror,nonetype,Python,Attributeerror,Nonetype,我一直收到一个错误,上面写着 AttributeError:'NoneType'对象没有属性'something' 我的代码太长,无法在此发布。什么样的一般情况会导致这种AttributeError,什么是NoneType应该是什么意思,我怎样才能缩小发生的事情?NoneType意味着,你实际上得到的不是你认为正在处理的任何类或对象的实例,而是None。这通常意味着上面的赋值或函数调用失败或返回意外结果。您有一个等于None的变量,并且您正试图访问它的一个名为“something”的属性 fo
AttributeError:'NoneType'对象没有属性'something'
我的代码太长,无法在此发布。什么样的一般情况会导致这种
AttributeError
,什么是NoneType
应该是什么意思,我怎样才能缩小发生的事情?NoneType意味着,你实际上得到的不是你认为正在处理的任何类或对象的实例,而是None
。这通常意味着上面的赋值或函数调用失败或返回意外结果。您有一个等于None的变量,并且您正试图访问它的一个名为“something”的属性
foo = None
foo.something = 1
或
两者都将产生一个
AttributeError:'NoneType'
NoneType
是值None
的类型。在这种情况下,变量寿命
的值为None
发生这种情况的一种常见方法是调用缺少返回的函数
但是,将变量设置为“无”的其他方法有无数种。其他人已经解释了什么是NoneType
,以及一种常见的结束方式(即无法从函数返回值)
另一个常见的原因是None
,您不希望在可变对象上分配就地操作。例如:
mylist = mylist.sort()
列表的sort()
方法对列表进行就地排序,即修改mylist
。但是该方法的实际返回值是None
,而不是排序的列表。所以您刚刚将None
分配给mylist
。如果您下一步尝试这样做,比如说,mylist.append(1)
Python会给您这个错误。考虑下面的代码
def return_something(someint):
if someint > 5:
return someint
y = return_something(2)
y.real()
这会给你一个错误
AttributeError:“非类型”对象没有属性“实”
因此,要点如下
在代码中,函数或类方法不返回任何内容或不返回任何内容
然后尝试访问返回对象的属性(无),从而导致错误消息
g、 d.d.c.是对的,但增加了一个非常常见的例子:
您可以以递归形式调用此函数。在这种情况下,您可能会以null指针或NoneType
结束。在这种情况下,您可以得到这个错误。因此,在访问该参数的属性之前,请检查它是否不是NoneType
它表示您试图访问的对象None
None
是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")
如果您已在Flask应用程序中注释掉HTML,则可能会出现此错误。此处“合格日期”的值为“无”:
<!-- <td>{{ qual.date_expiry.date() }}</td> -->
删除或修复该行:
<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>
{%if qual.date_获得!=None%}{{qual.date_获得.date()}{%endif%}
在构建估计器(sklearn)时,如果忘记在拟合函数中返回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:“非类型”对象没有属性“转换”
将return self
添加到fit函数可修复错误
if val is not None:
print(val)
else:
pass
检查特定数据是否不为空。取出演示问题的最小代码位。把它贴出来。添加print
函数(或语句,取决于版本),以显示存在此问题的代码中变量的实际值。“NoneType”表示类型=无。您可能正在尝试访问未声明的变量。您应该发布一个要点,以便我们可以帮助您。@LoïcGRENON:“未声明的变量”?用Python?那没有多大意义。如何声明变量?基本上这意味着您在调用yourobject.babyruth
之前做了yourobject=something\u即\u None
。可能某个\u为\u None的东西是一个返回None
的函数。没有代码是不可能知道的。@LoïcGRENON-在Python中不是这样的。您将获得“分配前引用”异常。变量不默认为None
。我不认为生存期
的值为None
(预编辑)。他试图访问另一个None
的生命周期属性。除非你指出人们可能最终从某个东西中得到None
,否则这可能没有帮助。明确的foo=None
不太可能成为问题;它将是foo=something()
,您没有意识到something()
可能会在失败或结果集为空时返回None
。是的,好的,但是如何进行检查呢?如果foo==None:如果foo不是None:
这是一个很好的解释-有点像在c#中得到一个空引用异常。该变量没有赋值,且为无。。谢谢。
if val is not None:
print(val)
else:
pass