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