我一直得到一个错误,说

AttributeError: 'NoneType' object has no attribute 'something'

我的代码太长了,不能在这里发布。什么样的场景会导致这个AttributeError, NoneType是什么意思,我该如何缩小范围?


当前回答

这里没有一个答案是正确的。我有这样一个场景:

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。为了修复它,我把它改为使用:

if answer is None:
   print('Empty')
else:
   print('Not empty')

其他回答

这里没有一个答案是正确的。我有这样一个场景:

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。为了修复它,我把它改为使用:

if answer is None:
   print('Empty')
else:
   print('Not empty')

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

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

foo = None
foo.something = 1

or

foo = None
print(foo.something)

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

在构建估计器(sklearn)时,如果您忘记在fit函数中返回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:“NoneType”对象没有属性“转换”?

将return self添加到fit函数中可以修复此错误。

如果在Flask应用程序中注释掉HTML,就会出现这个错误。这里qual.date_expiry的值是None:

   <!-- <td>{{ qual.date_expiry.date() }}</td> -->

删除或修复这一行:

<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>