Recursive function not returning value

Robert Brewer fumanchu at
Fri Sep 17 09:14:29 CEST 2004

Derek Rhodes wrote:
> OK, I have a recursive function that should return a list, but doesn't
> <start session>
1> def test(word):
2>     if type(word) == str:
3>         print "it's a word"
4>         test([word])
6>     if type(word) == list:
7>         print "The conditional worked, see ->", word
8>         return word
10> >>>a = test('foobity')
> it's a word
> The conditional worked, see -> ['foobity']
> >>> print a
> None
> </end session>
> What am I missing?

I numbered your lines above so I could describe what's going on. You
call test() twice, once from the prompt (line 10), and again inside test
itself (line4). The problem is that only one of those calls gets an
explicit return value, when "test([word])" on line 4 is called, it
receives the list as you expect. But then that value is not returned out
of the first call; in fact, there is no return value for that call, and
therefore "None" is returned.

The solution:

def test(word):
    if type(word) == str:
        print "it's a word"
        return test([word])    # Added a return here

    if type(word) == list:
        print "The conditional worked, see ->", word
        return word

Robert Brewer
Amor Ministries
fumanchu at

More information about the Python-list mailing list