zoukankan      html  css  js  c++  java
  • day19-2018-11-12 约束,异常处理,日志

    # # 贴吧
    # # 项目经理(级别高一点儿)
    # class Base:
    #     def login(self): # 强制子类做xxxx事
    #         raise NotImplementedError("子类没有实现该方法") # 报错. 抛异常
    #
    # # 1. 普通账号  -->  翔哥
    # class Normal(Base):
    #     def login(self):
    #         print("普通账号的登录")
    #
    # # 2. 吧务  - > 强哥
    # class Member(Base):
    #     def login(self):
    #         print("吧务的登录")
    #
    # # 3. 百度员工  -> 明哥
    # class Admin(Base):
    #     def login(self): # 方法的覆盖和重写
    #         print("管理员的登录")
    #
    # # 项目经理
    # def wodetian(obj):
    #     obj.login()
    #
    # n = Normal()
    # wodetian(n)
    #
    # m = Member()
    # wodetian(m)
    #
    # a = Admin()
    # wodetian(a)
    
    
    
    
    # 在python中可以写出抽象类和抽象方法. 来约束子类
    from abc import ABCMeta, abstractmethod
    # 贴吧
    # 项目经理(级别高一点儿)
    # class Base(metaclass=ABCMeta): # 抽象类
    #     # 抽象方法
    #     @abstractmethod # staticmethod, classmethod
    #     def login(self): # 强制子类做xxxx事
    #         pass
    #
    #     def hehe(self): # 抽象类中可以有正常的方法
    #         print("我会呵呵呵")
    #
    # # b = Base() # 报错的. 原因是Base是一个抽象类. 含有抽象方法. 不允许创建对象的
    #
    # # 一个类如果全部都是抽象方法. 这个类可以被称为接口. 用来约束子类和规范子类
    #
    # # 1. 普通账号  -->  翔哥
    # class Normal(Base):
    #     pass
    #     # def login(self): # 重写了父类中的抽象方法
    #     #     print("普通账号的登录")
    #
    # n = Normal()
    '''
    当我们需要对子类进行约束:
        1.抛出异常 NotImplementedError()  没有实现   -> 约定俗成.  多观察
        2.写抽象类
            from abc import ABCMeta, abstractmethod
            class Base(metaclass = ABCMeta):
                @abstractmethod
                def 方法(self):
                    pass
            如果一个类中包含了抽象方法. 那么这个类一定是一个抽象类
            一个抽象类中可以包含正常的方法
            
            接口: 接口中所有的方法都是抽象方法
            
            子类必须重写父类中的抽象方法. 否则子类也是一个抽象类
    '''
    
    # from abc import ABCMeta, abstractmethod
    #
    # class Animal(metaclass=ABCMeta):
    #     @abstractmethod
    #     def chi(self): # 抽象的概念
    #         pass
    #
    # class Cat(Animal): # 子类 .
    #     def chi(self): #  子类对抽象的内容给出具体的实现 . 重写
    #         print("猫用嘴吃")
    #
    # c = Cat()
    # c.chi()
    #
    # a = Animal() # 报错. 自己把报错的原因给出
    # a.chi()
    # 程序员是发现不了自己的错误的(边缘性错误)
    '''
    try:
        xxxx
    except 错误名称 as 别名:
        出现错误的时候. 要干什么...
    except 错误名称 as 别名:
        出现错误的是偶. 要干什么
    ....
    except Exception as e: # 所有错误的根
        出现的所有的错误. 我都可以这样处理
    else: # 很少用到
        不出错的时候执行这里的代码
    finally:
        结束. 收尾工作
    '''
    # try:
    #     print(1/0) #  0不能做除数   ZeroDivisionError: division by zero
    # except ZeroDivisionError as z:
    #     print("错了. 除数不能为0")
    
    # 由python解释器来调用代码. 出现了错误. 系统会自动的产生一个叫异常的对象.
    # 系统会尝试着把错误返回给调用方. 过程被称为:抛异常
    # 我们通过try...except 可以吧系统产生的这个错误获取到. 过程叫捕获异常
    
    # import traceback
    # # 计算a+b
    # def cul(a, b):
    #     if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
    #         return a + b
    #     else:
    #         # 在这里有两种方案. 1. 直接返回 , 2. 抛出异常
    #         # raise 抛出 Exception 错误和异常,所有错误的根
    #         raise Exception("我要的不是这个. 你应该我传递int或者float")
    #
    #
    # try:
    #     print(cul(1, "胡辣汤")) # 加上异常的处理
    # except Exception as e:
    #     # 获取到错误信息. 我们需要访问堆栈信息
    #     print(traceback.format_exc()) # 获取堆栈信息
    #     print("出现了错误")
    
    
    # 我们出现的错误. python中没有给出具体的记录, 慎用. 名字一定要符合规范
    # JackException
    # 自定义异常
    # class GenderException(Exception):
    #     pass
    #
    # class Person:
    #     def __init__(self, name, gender):
    #         self.name = name
    #         self.gender = gender
    #
    #     #  洗澡 -> 男的进男浴室
    #     def goto_nan_yushi(self):
    #         if self.gender != "男":
    #             raise GenderException("性别不对") # 除了名字以外都是父类中的Exception
    #         else:
    #             print("欢迎光临.")
    # try:
    #     p2 = Person("wusir", "女")
    #     p2.goto_nan_yushi()
    #     p1 = Person("alex", "男")
    #     p1.goto_nan_yushi()
    # except GenderException as e:
    #     print("你去男澡堂子干嘛?")
    # except Exception as e:
    #     print("其他错误")
    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.critical(traceback.format_exc())
        print("出错了. 请联系管理员")
    print("程序继续知悉个")
  • 相关阅读:
    基于Laravel开发博客应用系列 —— 十分钟搭建博客系统
    基于 Laravel 开发博客应用系列 —— 从测试开始(二):使用Gulp实现自动化测试
    基于 Laravel 开发博客应用系列 —— 从测试开始(一):创建项目和PHPUnit
    基于 Laravel 开发博客应用系列 —— Homestead 和 Laravel 安装器
    listView当中有嵌套了有onClickListener的控件时ListView自身的onItemClick无响应的解决方案
    Java enum的用法详解[转]
    Android图片上传问题小结
    byte数组和File,InputStream互转
    工程
    获取到Android控件的高度
  • 原文地址:https://www.cnblogs.com/VastTry/p/9947226.html
Copyright © 2011-2022 走看看