Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filter object has no attribute pop

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

Hello guys! Im getting in line 128, in replaceColorRamps middletxt = colors.pop()

AttributeError: 'filter' object has no attribute 'pop'

I used this code for python 2.5 and now im porting it to 3.4..

Can someone help me

like image 220
Fragkiller Avatar asked Dec 28 '25 16:12

Fragkiller


1 Answers

Are you running this in Python 3?

In Python 2.7 filter() returned a list, which has .pop() function.
In Python 3.x filter() returns a filter iterable object which does not.

Before you can .pop() from the filter in Python 3 you need to convert it to a list. So add e.g.

colors = list(colors) 

after the colors = filter(...) line. In Python 2.7 this will have no effect, so your code will continue to work there. See this question for more information and these docs.

like image 86
mfitzp Avatar answered Dec 30 '25 07:12

mfitzp