3
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

Fragkiller
  • 589
  • 2
  • 8
  • 21
  • 3
    You should create a [MCVE](http://stackoverflow.com/help/mcve). We don't know what "line 128" is in your code and this doesn't look like anyone can run it locally to reproduce. – code_dredd Jan 15 '16 at 22:08

1 Answers1

12

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.

Community
  • 1
  • 1
mfitzp
  • 15,275
  • 7
  • 50
  • 70