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("我才不去呢. 我们在北京. 离你那么远")

 

 

 
posted @ 2018-12-29 16:42  沐小熊  阅读(171)  评论(0编辑  收藏  举报