警告:类“list”的未解析属性引用“all”
Posted
技术标签:
【中文标题】警告:类“list”的未解析属性引用“all”【英文标题】:Warning: Unresolved attribute reference 'all' for class 'list' 【发布时间】:2021-09-30 17:39:02 【问题描述】:当我使用导入的 numpy 库创建这个简单的函数时,我收到了来自 PyCharm 的警告:Unresolved attribute reference 'all' for class 'list'
import numpy as np
def func():
b1 = [True, False, False]
b2 = [True, True, True]
return b1.all() and b2.all()
然后我将return b1.all() and b2.all()
更改为return np.all(b1) and np.all(b2)
并且警告消失了。
谁能解释一下为什么会出现这个警告?
【问题讨论】:
你试过all(b1)
吗? all
是内置方法,熊猫系列之类的列表没有名为all
的属性。
list
没有方法 all
。有一个内置的 all(b1) and all(b2)
您可以改用。 Numpy 也有一个 all 方法,这就是为什么它“解决”了你的问题。
np.all(alist)
实际上是 np.array(alist).all()
。它将参数转换为数组,然后应用该方法。 AttributeError
表示您要么对象错误,要么方法错误。 list
没有该方法(如果需要,请重新阅读基本 Python 文档)。
谢谢,我现在从您的评论中知道了原因。
【参考方案1】:
您可以使用内置的all
In [58]: def func():
...: b1 = [True, False, False]
...: b2 = [True, True, True]
...: return all(b1) and all(b2)
...:
In [59]: func()
Out[59]: False
Numpy 也有一个all
可以使用的函数,但是对于这个问题来说,仅仅为了使用它而导入 numpy 似乎有点矫枉过正。
【讨论】:
我也想问你关于类似于那个问题的布尔数组情况。我有函数:def is_greyscale_img(np_img): b1 = np_img[..., 0] == np_img[..., 1] b2 = np_img[..., 1] == np_img[..., 2] return b1.all() and b1.all()
其中 np_img 是 3d 数组,警告类似:类“bool”的未解析属性引用“全部”。 b1 和 b2 应该是布尔 3d 数组,而不是布尔值。你能解释一下为什么在这种情况下会弹出这个警告吗?
你确定是吗?检查type(np_img[..., 0])
是的,我是。 b1 = np_img[..., 0] == np_img[..., 1] print(type(np_img[..., 0])) print(type(b1))
控制台:<class 'numpy.ndarray'> <class 'numpy.ndarray'>
以上是关于警告:类“list”的未解析属性引用“all”的主要内容,如果未能解决你的问题,请参考以下文章
初始化引用 - 警告 C4355: 'this' : used in base member initializer list