错误发生时运行功能,无需尝试

时间:2018-08-23 08:41:05

标签: python python-3.x error-handling

每当发生错误时,我都试图运行一个函数。我不想使用tryexcept,因为我的代码很大,并且发生错误的可能性很大,所以我不能在任何地方都使用try .. 。这就是我所期望的:

>>> if ValueError:  #don't works , just assuming.
    print("Hey! You are done.")

>>> int("abc")
Hey! You are done.
>>> int("1b")
Hey! You are done.
>>> 

有什么办法吗?

2 个答案:

答案 0 :(得分:0)

如果您的代码是一个完整的块,我建议将其分成多个函数。在这里,您可以将每个函数包装在一个装饰器中,该装饰器会出现错误,并在错误时运行一个函数:

def handle_error(error, error_func):
    def decorator(func):
        def wrapper(*args, **kwargs):
            r = None
            try:
                r = func(*args, **kwargs)
            except error as e:
                r = error_func()
            finally:
                return r
        return wrapper
    return decorator

然后在类似这样的函数上使用:

def bad_value():
    print('bad value given!')

@handle_error(ValueError, bad_value)
def multiply(a, b):
    return a * b

当然,您可以更加“广泛”,并捕获所有异常...

@handle_error(Exception, error_func)
def func(): 
    # ...

答案 1 :(得分:0)

ValueError由特定的代码段触发,并将在违规语句后立即引发。 int("abc")会自行引发ValueError,并且程序将在到达任何if ValueError语句之前停止执行。

您需要一个try / except块,以允许python捕获错误并继续执行。没有一个人,我看不到任何方法来实现您想要的。