警告:类“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”的主要内容,如果未能解决你的问题,请参考以下文章

ProGuard 警告:对程序类成员有 7 个未解决的引用

初始化引用 - 警告 C4355: 'this' : used in base member initializer list

如何找到引发警告的未命名组件

如何在 minGW 中禁用 Eclipse 中的未使用变量警告?

[Vue 警告]:未定义属性或方法“$v”

使用开发安装后,警告对未解决的引用不起作用