[英]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.