Recursive function not returning value

Derek Rhodes rhoder at worldpath.net
Fri Sep 17 09:47:18 CEST 2004


"Steven Bethard" <steven.bethard at gmail.com> wrote in message 
news:mailman.3439.1095406129.5135.python-list at python.org...
> Derek Rhodes <rhoder <at> worldpath.net> writes:
>> OK, I have a recursive function that should return a list, but doesn't
>>
>> def test(word):
>>     if type(word) == str:
>>         print "it's a word"
>>         test([word])
>>
>>     if type(word) == list:
>>         print "The conditional worked, see ->", word
>>         return word
>
> By default, if a Python function does not hit a return statement before 
> the
> end of the function, it returns the None value.  Notice that if word is a 
> str,
> your function executes the first if-block, including the recursive call 
> and
> then skips the second if-block.  So in this case, you never hit a return
> statement and so Python returns None.  You probably meant to write:
>
> def test(word):
>    if type(word) == str:
>        return test([word])
>    if type(word) == list:
>        return word
>
> If you run into these kind of mistakes frequenly, it might be worth having
> only one return point in each function.  You would then write your code
> something like:
>
> def test(word):
>    if isinstance(word, str):
>        result = test([word])
>    elif isinstance(word, list):
>        result = word
>    else:
>    raise TypeError('unsupported type %r' % type(word))
>    return result
>
> Of course, this particular example probably doesn't merit a recursive 
> function
> anyway, but you get the idea...
>
> Steve
>
>

WOW,  thanks everyone for the quick reply!

-Derek. 





More information about the Python-list mailing list