• 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("程序继续知悉个")
    日志
  • 相关阅读:
    Python3.5 学习三
    心灵鸡汤20180727
    Python3.5 学习二
    spring心得4--setter注入集合(set、list、map、properties等多种集合,配有案例解析)@基本装(引用)
    drop user和drop user cascade的区别(转)
    数据库的导入 导出
    OracleDBConsole服务无法启动原因
    create XML
    C#里面Console.Write与Console.WriteLine有什么区别????
    将字符串 按照规定编码方式编码
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9948424.html
Copyright © 2020-2023  润新知