为什么我不能从python中的异常返回我的局部变量?

时间:2018-10-14 00:15:49

标签: python-3.x recursion exception-handling

在我第一次探索递归算法时,遇到了一个我无法弄清的怪异现象。我的功能旨在递归地反转字符串。

def revS(s, new):
    n = new
    try:
        ch = s[-1]
        n += ch
        revS(s[:-1], n)
    except IndexError:
        return n

print(revS("test", ""))

但是,它仅打印None。刚开始,我认为这可能与递归有关,好像我在构建n之前就将其返回一样。也许我是。但是即使如此,n在开始任何递归之前仍被分配了一个空字符串。因此,至少我希望它返回一个空字符串,而不是None 此外,如果我将异常处理更改为print(n),并且对revS("test", "")的调用将按预期进行。

我想念什么?

1 个答案:

答案 0 :(得分:1)

实际上与递归有关。

您的函数仅在出现异常时才返回,但在所有其他情况下都没有return语句,因此与返回None相同。

在发生异常时返回n时,该值将转到调用函数,依此类推,直到第一个函数调用(您对revS的拳头调用)为止,并且该值将返回None,也不例外。

如果您以此更改第六行,它将起作用:

revS(s[:-1], n)

return revS(s[:-1], n)