zoukankan      html  css  js  c++  java
  • 19 约束,日志,异常处理

    一.约束(规范)两种方式:
    1 父类方法中 raise NotImplementedError
    class Base:
    def pay(self):
    raise NotImplementError #如果子类继承了父类,而子类中没有该方法,就会执行父类中的该方法,抛出异常
    class Weichat(Base): #子类继承父类中的方法,如果子类中没有该方法就会调用父类中该方法,抛出异常
    def pay(self):
    print("使用微信支付")

    2.抽象方法
    from abc import ABCMeta , abstractclassmethod
    class Payment(metaclass=ABCMeta):
    @abstractclassmethod #约束子类必须要有该方法
    def pay(self): #子类必须含有pay方法
    pass
    class Wechat(Payment):
    def pay(self): #子类如果不含pay方法就会报错
    print("用微信支付")


    3.异常处理
    1.所有的错误都是Exception的⼦类对象
    2.由python解释器来调用代码. 出现了错误. 系统会自动的产生一个叫异常的对象.
    系统会尝试着把错误返回给调用方. 过程被称为:抛异常
    我们通过try...except 可以把系统产生的这个错误获取到. 过程叫捕获异常
    3.自定义异常错误名称:
    class 异常名称
    pass
    4.异常错误完整流程
    try: #可能导致代码部分执行
    要执行的代码
    except 错误名称 as 别名
    此错误要执行的代码
    except 错误名称 as 别名
    此错误要执行的代码
    .......
    except Exception as e:
    出现所有错误,都可以处理
    else:#很少用
    不出错时执行这里的代码
    finally:
    结束 收尾工作
    5.日志
    ## 案例2
    import logging
    # filename: ⽂件名
    # format: 数据的格式化输出. 最终在⽇志⽂件中的样⼦
    # 时间-名称-级别-模块: 错误信息
    # datefmt: 时间的格式
    # level: 错误的级别权重, 当错误的级别权重⼤于等于leval的时候才会写⼊⽂件
    logging.basicConfig(filename='x1.log',
         format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
         datefmt='%Y-%m-%d %H:%M:%S',
    level=30)
    # 当前配置表示 0以上的分数会被写⼊⽂件
    # CRITICAL = 50
    # FATAL = CRITICAL  critical
    # ERROR = 40      error
    # WARNING = 30   warning
    # WARN = WARNING   
    # INFO = 20    info
    # DEBUG = 10   bebug
    # NOTSET = 0   notset
    logging.critical("我是critical") # 50分. 最贵的
    logging.error("我是error") # 40分
    logging.warning("我是warning")
    logging.info("我是info")
    logging.debug("我是debug")
    logging.log(1, "我什么都不是")
    
    import traceback
    try:
        print(1/0)
    except Exception:
        logging.error(traceback.format_exc()) # 获取堆栈信息
        print("出错了")
    
    
    # 案例2
    import logging
    # 创建⼀个操作⽇志的对象logger(依赖FileHandler)
    #                       open()
    file_handler = logging.FileHandler('zuo.log', 'a', encoding='utf-8')
    file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"))
    logger1 = logging.Logger('qq', level=20)
    logger1.addHandler(file_handler) # 把文件助手和日志对象绑定
    logger1.error('我是A系统出错了') # 记录日志
    
    # 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
    file_handler2 = logging.FileHandler('you.log', 'a', encoding='utf-8')
    file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
    logger2 = logging.Logger('B系统', level=20)
    logger2.addHandler(file_handler2)
    
    
    import traceback
    try:
        print(1/0)
    except Exception:
        logger2.error(traceback.format_exc()) #获取堆栈信息,错误信息,写入日志
        print("出错了. 请联系管理员")
    print("程序继续知悉个")
    日志
  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9948424.html
Copyright © 2011-2022 走看看