• 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 

    总结

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

  • 相关阅读:
    SpringCloud - 微服务
    【Try Hack Me】Enumerating Active Directory
    类和对象(一)this指针详解
    Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 3(VueUse )
    宫敏把自由软件和 Linux 带回中国
    android中Room数据库的基本使用
    乌蒙滴叉自制谱上机教程
    BI业务分析思维:现金流量风控分析(二)信用、流动和投资风险
    TCP补充
    5. `sklearn`下的线性回归
  • 原文地址:https://blog.csdn.net/qq_55542491/article/details/132752924