try-except 搭配装饰器使用

前言

懒惰促进发明。话说我每次写代码总是每逢函数必套try except ,真的是心累,所以为啥不弄个装饰器放上去。

这个装饰器还得满足几点要求:

  • 被装饰函数正常运行无影响
  • 被装饰函数运行错误,不影响主程序,且可保留日志
  • 装饰器应设定默认返回参数,且参数根据被装饰函数而调整

代码

无需返回默认参数装饰器
def try_except2(func):
  def handler(*args, **kwargs):
    try:
      func(*args, **kwargs)
    except (BaseException,Exception) as e:
      print(traceback.format_exc()) #用于记录错误日志的
      return "这里的return替代了error2所返回的 a"
  return handler
@try_except2
def error2(x):
  a=x/0
  return a
a=error2(1)
print(a)

>>>ZeroDivisionError: division by zero

>>>这里的return替代了error2所返回的 a

可指定默认返回参数的装饰器

简单的来说就是,如果函数运行正常,返回a,x,0;如果函数运行错误,依旧能够返回三个参数"the","is","error"  。而且这三个参数,是可以指定的。当然也可以多加一个参数,传递指定的日志信息。

def try_except(*parames):
  def wrap(func):
    def handler(*args, **kwargs):
      try:
        func(*args, **kwargs)
      except (BaseException,Exception) as e:
        print(traceback.format_exc()) 
        return parames #此处返回的是装饰参数里的 "the","is","error" 三个返回值
    return handler

  return wrap
@try_except("the","is","error")
def error1(x):
    a=x/0
    return a ,x ,0
a,b,c=error1(3)
print(a,b,c)

>>>ZeroDivisionError: division by zero

>>>the is error 

总结

完美,再也不怕程序意外错误了

猜你喜欢

转载自blog.csdn.net/qq_55542491/article/details/132752924