Lambda函数中的未定义变量

时间:2018-11-14 16:45:54

标签: python pyspark pylint

我有代码:

from functools import reduce

public_ids = [1,2,3,4,5]
filepath = '/path/to/file/'

rdd = sc.textFile(
    filepath
)

new_rdd = reduce(
    lambda a, b: a.filter(
        lambda x: b not in x
    ),
    public_ids,
    rdd
)

此代码假定根据ID列表过滤rdd中的行。 rdd是使用spark上下文sc的textFile方法从文件路径中的文件创建的。

此代码可以正常工作,但是pylint会引发错误:

  

E:未定义变量'b'(未定义变量)

我相信我的编码方式不是正确的方式。如何更改它,使pylint不会再次引发错误?还是只是pylint无法正确识别的结构?

1 个答案:

答案 0 :(得分:6)

最有可能是pylint中的错误。

这是2年前的similar bug report

  

test_data <- structure(list(Model = c("Audi TT", "Audi TT", "Audi TT", "Volkswagen Golf" ), Month = c("2016-03", "2017-03", "2016-03", "2016-08"), Country = c("NL", "NL", "DE", "NL"), Price = c(187L, 220L, 190L, 204L)), .Names = c("Model", "Month", "Country", "Price"), class = "data.frame", row.names = c(NA, -4L))

     

运行时正确打印2,但是pylint错误报告

     

foo = lambda x: lambda: x + 1 print(foo(1)())

     

这是来自pylint 1.4.x的回归。

这是recent issue于2018年11月14日报告了同一问题

  

已在#760报告此问题,并在#2274中解决了该问题。然而   修复程序仅合并到仅支持python> = 3.4的pylint 2.x中   留下了pyintt 1.x系列python中无法解决的错误   2。

编辑

看起来您的误报可能与上述问题略有不同,不过,我仍然会认为这是一个错误。

我会尝试在他们的仓库上创建一个问题,看看会发生什么 (如果您决定这样做,请在评论中发布链接,以便我们关注。)