簡體   English   中英

Python:當出現錯誤中斷程序時如何退出遞歸 function

[英]Python: How to quit a recursive function when an error arises interrupting the program

假設我有一個遞歸 function 之類的

def func(n, lis):
    if n == 1:
        return lis
    else:
        lis = func(n-1, lis[:-1])
        print(n,lis)
        lis.append(n)
        if len(lis) < 5:
            return lis
        else:
            return 'Error'

如果我跑

print (func(6, [6,5,4,3,2,1]))

我明白了

2 [6]
3 [6, 2]
4 [6, 2, 3]
5 [6, 2, 3, 4]
6 Error
Traceback (most recent call last):
  File "d:/Python/test.py", line 324, in <module>
    print (func(6, [6,5,4,3,2,1]))
  File "d:/Python/test.py", line 314, in func
    lis.append(n)
AttributeError: 'str' object has no attribute 'append'

function 讀取func(5, [6,2,3,4,5])的返回值,即'Error' ,並將其放入func ,產生AttributeError 這不是我想要的,因為它會停止程序。 我試過了

class AtLeastFive(Exception):
    pass

def func(n, lis):
    if n == 1:
        return lis
    else:
        lis = func(n-1, lis[:-1])
        print(n,lis)
        lis.append(n)
        if len(lis) < 5:
            return lis
        else:
            raise AtLeastFive

但這仍然會中斷程序。 我需要為一系列列表運行 function ,所以我不想要Exception 我想要的是類似的東西

for lis in lists:
    func(n, lis)

但是當出現異常時它會停止。 當壞事發生而不中斷循環時,是否可以退出 function?

如果我了解您要執行的操作,則您的 function func最終應為您傳遞給它的 arguments 返回Error 如果是這種情況,那么以下代碼應該可以工作:

def func(n, lis):
    if n == 1:
        return lis
    else:
        lis = func(n-1, lis[:-1])
        print(n,lis)
        # test to see if return value is `Error` and if so, return it:
        if lis == 'Error':
            return lis
        lis.append(n)
        if len(lis) < 5:
            return lis
        else:
            return 'Error'

print (func(6, [6,5,4,3,2,1]))

印刷:

2 [6]
3 [6, 2]
4 [6, 2, 3]
5 [6, 2, 3, 4]
6 Error
Error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM