Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError: 'NoneType' object has no attribute 'append'

Tags:

python

I have a weird problem with python passing a list as parameter to a function. Here is the code:

def foobar(depth, top, bottom, n=len(listTop)):
    print dir(top)
    print top.append("hi")
    if depth > 0:
        exit()
    foobar(depth+1, top.append(listTop[i]), bottom.append(listBottom[i]))

top = bottom = []
foobar(0, top, bottom)

It says "AttributeError: 'NoneType' object has no attribute 'append'", because top is None in foobar although dir(top) prints a full attribute and method list of a type list. So whats wrong? I just wanted to pass two lists as parameters to this recursive function.

like image 929
Cravid Avatar asked Mar 31 '26 15:03

Cravid


2 Answers

You pass in the result of top.append() to your function. top.append() returns None:

>>> [].append(0) is None
True

You need to call .append() separately, then pass in just top:

top.append(listTop[i])
bottom.append(listBottom[i])
foobar(depth+1, top, bottom)

Note that the n=len(listTop) argument in the function is both redundant and only ever executed once, namely when you create the function. It won't be evaluated each time you call the function. You can omit it safely from the version you posted here in any case.

like image 187
Martijn Pieters Avatar answered Apr 02 '26 03:04

Martijn Pieters


top.append(listTop[i]) works in place and returns None

like image 33
applicative_functor Avatar answered Apr 02 '26 03:04

applicative_functor



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!