我希望循环继续执行,直到每个错误处理完毕(6到9)。现在它似乎在i == 6处终止中间执行。我使用装饰器来处理错误。我做错了什么?
class SomeError(Exception):
pass
def do_something_helper(number: int) -> bool:
if number > 5 and number < 10:
raise SomeError(f"Some kind of error")
else:
return True
def do_nothing(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except SomeError as e:
print("Handle the error")
return wrapper
@do_nothing
def do_something_main(number: int):
for i in range(0, number):
print(i)
if do_something_helper(i):
print("Next")
else:
print("Something's wrong")
do_something_main(20)
>>
0
Next
1
Next
2
Next
3
Next
4
Next
5
Next
6
Handle the error
1条答案
按热度按时间ajsxfq5m1#
目前,
do_nothing
基本上将整个do_something_main
函数 Package 在一个try块中。一旦引发异常,整个函数的执行就会停止。尽管异常被处理了,但那是在它已经传播出do_something_main
函数之后。如果你用
@do_nothing
修饰do_something_helper
,那么循环将继续通过所有的迭代,因为异常被立即处理,而没有机会离开do_something_main
函数。