如何使用python装饰器继续执行循环而不提前终止函数?

q5iwbnjs  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(229)

我希望循环继续执行,直到每个错误处理完毕(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
ajsxfq5m

ajsxfq5m1#

目前,do_nothing基本上将整个do_something_main函数 Package 在一个try块中。一旦引发异常,整个函数的执行就会停止。尽管异常被处理了,但那是在它已经传播出do_something_main函数之后。
如果你用@do_nothing修饰do_something_helper,那么循环将继续通过所有的迭代,因为异常被立即处理,而没有机会离开do_something_main函数。

相关问题