首页 > 解决方案 > 海象运算符:NameError:在封闭范围内赋值之前引用了自由变量“it”

问题描述

我想使用这样的海象运算符创建一个列表:

    myvar = tr_list[8].css('td ::text').extract()
    item['myvar'] = [
        it := re.sub(PATTERN, "", i).strip() for i in myvar if len(it) > 0
    ]

我得到这个错误:

    it := re.sub(PATTERN, "", i).strip() for i in myvar if len(it) > 0
NameError: free variable 'it' referenced before assignment in enclosing scope

另一方面,当我这样做时,它会起作用:

    myvar = tr_list[8].css('td ::text').extract()
    item['myvar'] = [
        re.sub(PATTERN, "", i).strip() for i in myvar if len(re.sub(PATTERN, "", i).strip()) > 0
    ]

在哪里:

PATTERN = "\r|\t|\n"

任何人都可以帮忙吗?我不知道我在这里错过了什么

标签: pythonscrapywalrus-operator

解决方案


好的。我想我终于通过将其更改为:

    myvar = tr_list[8].css('td ::text').extract()
    item['myvar'] = [
        n for i in myvar if len(n := re.sub(PATTERN, "", i).strip()) > 0
    ]

推荐阅读