Python 3.x 为什么可以';我是否从python中的异常返回局部变量?
在我第一次探索递归算法时,我遇到了一个我无法理解的奇怪现象。我的函数旨在递归地反转字符串Python 3.x 为什么可以';我是否从python中的异常返回局部变量?,python-3.x,recursion,exception-handling,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。也
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”)
一切正常
我遗漏了什么?它实际上与递归有关 函数仅在出现异常时返回,但在所有其他情况下都没有返回语句,因此这与返回
None
相同
当您在出现异常时返回n
时,该值将传递给调用函数,依此类推,直到第一次函数调用(您对revS
的第一次调用)为止,并且由于没有异常,该函数将不返回任何值
如果您使用此选项更改第6行,它将起作用:
revS(s[:-1], n)
到
知道了。所以只有最后一个电话实际上返回了任何东西。但这一次的回音被包装在一堆没有回音的电话中。因此,
None
是我的最终结果。非常感谢。
return revS(s[:-1], n)