为什么我不能从 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)
在我第一次探索递归算法时,我 运行 遇到了一个我无法理解的怪事。我的函数旨在递归地反转字符串。
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)