【发布时间】:2021-03-28 13:44:46
【问题描述】:
假设我有一个递归函数,比如
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'
函数读取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
但这仍然会中断程序。我需要为一系列列表运行该函数,所以我不想要Exception。我想要的是类似的东西
for lis in lists:
func(n, lis)
但是当出现异常时它会停止。发生不好的事情时是否可以在不中断循环的情况下退出函数?
【问题讨论】:
标签: python function recursion exception