过滤器对象没有属性弹出

Fra*_*ler 3 python python-3.x

colorramps = re.split("#ramp\[([0-9a-fA-F]{6})\](.+?)#rampend\[([0-9a-fA-F]{6})\]", message)
colorramps.reverse()
if len(colorramps) > 1:
    starttext = colorramps.pop()
    starttext = starttext.replace("$message", getSaveString(text))
    starttext = starttext.replace("$playername", getSaveString(username), 1)
    complete = [starttext]
    while len(colorramps):
        startcolor = getColor(colorramps.pop())
        colors = filter(None, re.split("#over\[([0-9a-fA-F]{6})\]", colorramps.pop()))
        middletxt = colors.pop()
        endcolor = getColor(colorramps.pop())
        middletxt = middletxt.replace("$message", getSaveString(text))
        middletxt = middletxt.replace("$playername", getSaveString(username), 1)
        middletxt = middletxt.decode("utf")
        if len(colors) > 0:
            colors = map(getColor, colors)
            colors.append(endcolor)
            middletxt = rangeOverColors(middletxt, startcolor, colors)
        else:
            middletxt = getRangeString(middletxt, startcolor, endcolor)
        middletxt = middletxt.encode("utf")
        complete.append(middletxt)
        endtext = colorramps.pop()
        endtext = endtext.replace("$message", getSaveString(text))
        endtext = endtext.replace("$playername", getSaveString(username), 1)
        complete.append(endtext)
    message = "".join(complete)
else:
    message = message.replace("$message", getSaveString(text))
    message = message.replace("$playername", getSaveString(username), 1)
return message
Run Code Online (Sandbox Code Playgroud)

大家好!我进入第128行,在replaceColorRamps中middletxt = colors.pop()

AttributeError:'filter'对象没有属性'pop'

我将此代码用于python 2.5,现在将其移植到3.4 ..

有人能帮我吗

mfi*_*tzp 11

你在Python 3中运行它吗?

在Python 2.7中filter()返回了一个list.pop()功能的.
在Python 3.x中filter()返回一个filter不可迭代的对象.

.pop()filterPython 3开始之前,您需要将其转换为列表.所以添加例如

colors = list(colors) 
Run Code Online (Sandbox Code Playgroud)

之后colors = filter(...).在Python 2.7中,这将没有任何效果,因此您的代码将继续在那里工作.有关更多信息这些文档,请参阅此问题.