在except中包含函数时有什么问题? 在我的例子中,我有以下功能:
def inventedfunction(list1):
print "initial list %r" %list1
SOMETHING THAT CREATES list2 based on list1
try:
list2[1]
print "inside try %r" %list2
inventedfunction(list2)
except:
print "inside except %r" %list2
return list2
运行inventedfunction(somelist)后,似乎一切正常:
^{pr2}$但它不会返回任何东西。如果我在外部包含return list2,则它返回[[3,562],[2,7],[2,7],[3,62],[6]]而不是[[2,2,3,3,6,7,7,62,562]]这是我想要的。在
如果我更改此代码:
if len(list2)!=1:
inventedfunction(list2)
else:
return list2
函数中没有返回。在
另一个简单的示例也不返回任何内容:
def inventedfunction(list1):
list2=list1[:-1]
if len(list2)!=1:
inventedfunction(list2)
else:
return list2
您正在递归调用函数-
inventendfunction()
-但从未返回从递归调用中获得的结果,因此它不会返回任何内容,您还需要返回递归调用返回的结果-另外,有一个空的
except
是不好的,您应该考虑在调用inventedfunction()
时会出现什么异常,并且只有那些异常除外。在因为在你的评论里-
让我们以一个简单的函数
^{pr2}$a()
为例,它执行递归,并且与您的类似-正如您在上面看到的返回
0
的简单示例,为什么?让我们一步一步来-调用函数
a(0)
,这里的i
是0,所以转到else部分,调用a(1)
。在现在,您又进入了
a
,其中i
为1
,现在转到if
部分,这将返回"Hello"
。在现在,在返回之后,您不会直接返回到您调用
a(0)
的main()
,也不会返回到函数a(1)
被调用的位置,而且是从a(0)
内部调用的,所以您返回到a(0)
,执行继续,但是由于a(0)
没有返回任何内容,所以您将在main
中获得默认返回值,该值是“无”。对于您的示例,您需要添加
return inventedfunction(list2)
,以便它正确地返回递归调用的结果,否则递归调用的返回值将被丢弃而不会返回。示例-您的函数只有在
except
子句中有一个return
,因此如果没有异常,它不会返回任何内容。也许你是想在try
内做return inventedfunction(list2)
。在相关问题 更多 >
编程相关推荐