Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么可以';我是否从python中的异常返回局部变量?_Python 3.x_Recursion_Exception Handling - Fatal编程技术网

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)