在一个except python中返回

2024-10-02 06:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在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

Tags: 函数功能lenreturnifdefelse例子
2条回答

您正在递归调用函数-inventendfunction()-但从未返回从递归调用中获得的结果,因此它不会返回任何内容,您还需要返回递归调用返回的结果-

try: 
    list2[1]
    print "inside try %r" %list2
    return inventedfunction(list2) 

另外,有一个空的except是不好的,您应该考虑在调用inventedfunction()时会出现什么异常,并且只有那些异常除外。在


因为在你的评论里-

I guess my problem doesn't have to do with the function but understanding how recursion works.

让我们以一个简单的函数a()为例,它执行递归,并且与您的类似-

^{pr2}$

正如您在上面看到的返回0的简单示例,为什么?让我们一步一步来-

main -> a(0)
  1. 调用函数a(0),这里的i是0,所以转到else部分,调用a(1)。在

    main -> a(0) -> a(1)
    
  2. 现在,您又进入了a,其中i1,现在转到if部分,这将返回"Hello"。在

    main -> a(0)         #Returned back to a(0)
    
  3. 现在,在返回之后,您不会直接返回到您调用a(0)main(),也不会返回到函数a(1)被调用的位置,而且是从a(0)内部调用的,所以您返回到a(0),执行继续,但是由于a(0)没有返回任何内容,所以您将在main中获得默认返回值,该值是“无”。


对于您的示例,您需要添加return inventedfunction(list2),以便它正确地返回递归调用的结果,否则递归调用的返回值将被丢弃而不会返回。示例-

def inventedfunction(list1):
    list2=list1[:-1]
    if len(list2)!=1:
        return inventedfunction(list2) 
    else:
        return list2

您的函数只有except子句中有一个return,因此如果没有异常,它不会返回任何内容。也许你是想在try内做return inventedfunction(list2)。在

相关问题 更多 >

    热门问题