zoukankan      html  css  js  c++  java
  • python 约束. 异常处理. MD5. 日志处理

    一.约束

    1.抛异常

     1 # # 项目经理写的
     2 class Base:
     3 #     # 对子类进行了约束. 必须重写该方法
     4 #     # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError 继承他, 直接重写他
     5     def login(self):
     6         raise NotImplementedError("你要重写一下longin这个方法. 否则报错!")  # 抛异常
     7 #
     8 # # 自己写的
     9 class Member(Base):
    10     def login(self):
    11         print('我是普通人登录')
    12 
    13 class BaWu(Base):
    14     def login(self):
    15         print('吧务登录')
    16 
    17 class Houtai(Base):
    18     # def denglu(self):  # 报错, 上层程序员写代码没有按照规范来 # NotImplementedError: 你要重写一下longin这个方法. 否则报错!
    19     #     print('后台登录')
    20 
    21     def login(self):  # 正确版  # 把上面的denglu 改成 login 才是正确的不会报错
    22         print('后台登录')

    2.抽象类和抽象方法

     1 # 抽象方法不需要给出具体的方法体. 抽象方法内只写一个pass就可以了
     2 # 在一个类中如果一个方法是抽象方法. 那么这个类一定是一个抽象类
     3 # 抽象类中. 如果有抽象方法. 此时这个类不能创建对象
     4 # 如果一个类中所有的方法都是抽象方法. 这个类可以被称为接口类
     5 
     6 # 写一个抽象方法: 导入一个模块
     7 from abc import ABCMeta,abstractmethod
     8 
     9 # 此时抽象类不能创建对象
    10 class Animal(metaclass= ABCMeta): # 写完这个东西. 就是个抽象类
    11 
    12     @abstractmethod
    13     def chi(self):
    14         pass
    15 
    16     # 抽象类中可以有正常的方法
    17     def dong(self):
    18         print('动物会动')
    19 
    20 # class cat(Animal):  #此时猫里面也有一个抽象方法, 此时的猫是创建不了对象的
    21 #     pass
    22 
    23 class cat(Animal):
    24     def chi(self):  # 重写父类中的抽象方法
    25         print('猫喜欢吃鱼')
    26 
    27 c =cat()
    28 c.chi()
    29 c.dong()

    二.异常处理

    try:
        print(1/10)
        f = open('哈哈哈哈',mode='r')
        d = {[]:123}
    except ZeroDivisionError:
        print('除以0出错了')
    except FileNotFoundError:  # 处理完错误后就不往下走了
        print('文件不存在的错误')
    except Exception:  # 兜底的 能处理所有错误
        print('其他错误')
    
    else:  # 当try中的代码不产生任何错误的时候. 会自动的执行else里的代码 基本没什么用 都直接写try里了
        pass
    
    finally:  # 最终. 不管出错还是不出错. 都要执行最后的finally 一般用来收尾 以后数据连接还有各种连接用来断开连接用
        print('哈哈哈哈哈')
    如何自己定义异常
    随便写一个类. 这个类只要继承了Exception 这个类就是一个异常类就可以作为raise对象
     1 class CulException(Exception):
     2     pass
     3 
     4 
     5 # 如何手动抛出异常
     6 def cul(a,b):
     7     # 只能是数字相加
     8     if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
     9         return a + b
    10 
    11     else:
    12         # 抛出异常
    13         # raise 异常类(错误信息)
    14         raise CulException('我没有办法给你处理这样的运算')
    15 
    16 print(cul('就是不放',2))

    三.MD5

    1 import hashlib
    2 
    3 # md5对象
    4 
    5 obj = hashlib.md5(b'qweqws')  # 加盐
    6 obj.update('123456'.encode('utf-8'))  # 把要加密的内容给Md5
    7 print(obj.hexdigest())  # 拿到密文 d2a43a16b3a92a620c4a769ed2d7b45c

    四.日志处理

    (1)单个日志

     1 import logging
     2 
     3 #
     4 # 配置好日志的处理, 默认就是GBK
     5 logging.basicConfig(filename='x1.txt',  # 把日志信息写入的文件名
     6                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
     7                     datefmt='%Y-%m-%d %H:%M:%S',  # 时间的格式
     8                     level=10)  # 当前配置表示 10以上的分数会被写入日件
     9 
    10 # 向日志文件写内容
    11 logging.critical('今天嫂子没有来')  # 50, 几乎是最高的 level = 50
    12 logging.error('昨天嫂子来了')  # 40 平时使用最多的就是他
    13 logging.warning('还好吧')  # 30 警告
    14 logging.info('提示')  # 20 提示
    15 logging.debug('开发的时候把这个开着')  # 10
    16 logging.log(999, '宝宝今天又懵逼了')  # 999 是自定义的等级 后面的是内容

    (2)多个日志

     1 import logging
     2 
     3 
     4 # 创建一个操作日志的对象logger(依赖FileHandler)
     5 file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') # 创建文件
     6 file_handler.setFormatter(logging.Formatter(
     7     fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) # 设置日志文件的格式
     8 logger1 = logging.Logger('腾讯qq', level=10) # 创建一个日志文件处理对象
     9 logger1.addHandler(file_handler)
    10 
    11 logger1.error("麻花藤明天请大家吃饭. 去不去?")
    12 
    13 
    14 # # 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
    15 # file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')
    16 # file_handler2.setFormatter(logging.Formatter(
    17 #     fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
    18 # logger2 = logging.Logger('百度贴吧', level=logging.DEBUG)
    19 # logger2.addHandler(file_handler2)
    20 #
    21 # logger2.error("我才不去呢. 我们在北京. 离你那么远")
     
  • 相关阅读:
    performance lazy-initialization
    Blazor项目文件分析
    Ubuntu 16.04重启Nautilus
    Ubuntu下查看APT安装的软件安装路径和版本
    Ubuntu 16.04搭建原始Git服务器
    Java原始封装常用HttpRequest
    CentOS 5/6安装后的必备设置(转)
    CentOS通过日志反查入侵(转)
    CentOS下防御或减轻DDoS攻击方法(转)
    通过LoadBalancerClient获取所有服务列表的IP
  • 原文地址:https://www.cnblogs.com/beargod/p/10196805.html
Copyright © 2011-2022 走看看