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

why can't I return my local variable from an exception in python?

在我第一次探索递归算法时,我 运行 遇到了一个我无法理解的怪事。我的函数旨在递归地反转字符串。

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

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

然而,它只打印 None。一开始我以为可能和递归有关系,好像我returning n还没建好。也许我是。但即便如此, n 在任何递归甚至开始之前都被分配了一个空字符串。所以至少,我希望它是 return 一个空字符串而不是 None 此外,如果我将异常处理更改为 print(n) 并且调用 revS("test", "") 一切正常。

我错过了什么?

其实跟递归有关

您的函数仅在出现异常时才 returning,但在所有其他情况下都没有 return 语句,因此这与 returning None.

当你 return n 出现异常时,该值会转到调用函数,依此类推,直到第一个函数调用(你第一次调用 revS)和那一个会 return None 因为没有例外。

如果你用这个改变第 6 行它有效:

revS(s[:-1], n)

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