异常处理,约束,MD5加密,日志处理

1,异常处理

一般的异常处理说的是抛异常和处理异常

  • 异常处理从产生异常开始
    语法:
    抛异常:产生异常
    raise Exception("")
  • 处理异常
    语法:
    处理异常
    try:
    操作
    except Exception as e:
    异常父类,可以捕获所有异常
    else:
    保护不抛出异常的代码,当try中午异常的时候执行
    finall:
    最后总要执行我
  • 自定义异常类,只需要继承Exception
    语法:
    自定义异常
    class Gandererror(Exception):
    pass

处理异常用法:

 1 import  traceback #导入一个包,获取错误堆栈信息
 2 #一个加法的函数,只能算整数,其他数据类型抛出异常
 3 def add(a,b):
 4     if type(a) != int or type(b) != int:
 5         raise TypeError("不是整数")
 6     else:
 7         return a+b
 8 #捕获异常并处理
 9 try:
10     c = add(10,"s")
11 except TypeError as e:
12     print(e)
13     val = traceback.format_exc()
14     print(val)

2,约束

约束是对子类进行的约束
1 通过抛异常(简单,Python适用)
在父类中给出一个方法,
这个方法什么都不写,就抛异常NotImplementError()
在子类中把上述方法进行重写

 1 class Animal(object):#父类中的方法抛异常
 2     def chi(self):
 3         raise NotImplementedError()
 4 class Cat(Animal):#子类有重构方法
 5     def chi(self):
 6         print("好看的吃")
 7 class Dog(Animal):#子类没有重构方法
 8     def chisi(self):
 9         print("吃的真香")
10 def chi(obj):
11     obj.chi()
12 c = Cat()
13 d = Dog()
14 chi(c)#这个能执行
15 chi(d)#这个不能执行


2 抽象类和抽象方法 接口:类中都是抽象的方法
from abc import ABCMeta,abstractmethod
抽象方法:抽象方法不用给出方法体,就写个pass就行了
抽象类:
类(metaclass=ABCMeta)
概念:如果类中包含抽象方法,这个类一定是抽象类
特点:抽象类一般不创建对象
抽象类中可以存在正常方法
可以约束子类必须实现抽象方法
  

3,MD5加密

MD5加密:
不可逆
引入模块 hashlib
  为了防止撞库,可以加密的时候加点料

使用:

 1 import hashlib
 2 
 3 obj = hashlib.md5()
 4 #obj = hashlib.md5(b'afnchannednaa')
 5 obj.update("shuai".encode(encoding="utf-8"))
 6 mi = obj.hexdigest()
 7 print(mi)
 8 
 9 
10 运行结果:
11 0e0e07a286355994d72085e8ce9761cd

4,日志处理

日志处理(重要,简单)
引入logging模块
  • 基本配置
     1 import logging
     2 logging.basicConfig(filename='app.log',#文件名,创建在同一目录下面
     3                     format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
     4                     #格式化时间,对应下面的datefmt,
     5                     #用户
     6                     #日志等级名
     7                     #模块,即文件名
     8                     #信息,调用写入
     9                     datefmt='%Y-%m-%d %H:%M:%S',
    10                     level=40)
    11                          #CRITICAL = 50
    12                         #日志级别
    13                         #FATAL = CRITICAL
    14                         #ERROR = 40
    15                         #WARNING = 30
    16                         #WARN = WARNING
    17                         #INFO = 20
    18                         #DEBUG = 10
    19                         #NOTSET = 0
    20 
    21 
    22 logging.critical("我是critical")
    23 logging.error("我是error")
    24 logging.warning("我是警告")
    25 logging.info("我是基本信息")
    26 logging.debug("我是调试")
    27 logging.log(2, "我是自定义")
    28     
  • 简单应用
     1 import traceback,logging
     2 
     3 logging.basicConfig(filename='app.log',#文件名,创建在同一目录下面
     4                     format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
     5                     #格式化时间,对应下面的datefmt,
     6                     #用户
     7                     #日志等级名
     8                     #模块,即文件名
     9                     #信息,调用写入
    10                     datefmt='%Y-%m-%d %H:%M:%S',
    11                     level=40)
    12                         CRITICAL = 50
    13                         日志级别
    14                         FATAL = CRITICAL
    15                         ERROR = 40
    16                         WARNING = 30
    17                         WARN = WARNING
    18                         INFO = 20
    19                         DEBUG = 10
    20                         NOTSET = 0
    21 #抛出异常,通过处理异常,捕获异常写入日志
    22 for i in range(20):
    23     try:
    24         if i % 3 == 0:
    25             raise FileNotFoundError("我是FileNotFountException")
    26         elif i % 3 == 1:
    27             raise StopIteration()
    28         elif i % 3 == 2:
    29             raise KeyError()
    30 
    31     except FileNotFoundError as e:
    32         val = traceback.format_exc()
    33         logging.error(val)
    34     except StopIteration as e:
    35         val = traceback.format_exc()
    36         logging.error(val)
    37     except KeyError as e:
    38         val = traceback.format_exc()
    39         logging.error(val)
    40     except Exception as e:
    41         val = traceback.format_exc()
    42         logging.error(val)
  • 多个日志文件写入,类似于Nginx中的access.log和error.log
     1 import logging
     2 
     3 # 创建⼀个操作⽇志的对象logger(依赖FileHandler)
     4 file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8')
     5 # 设置日志文件内容的格式
     6 file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"))
     7 logger1 = logging.Logger('A', level=40)
     8 logger1.addHandler(file_handler)
     9 # 记录日志
    10 logger1.error('我是A系统')
    11 
    12 # 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
    13 file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')
    14 file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
    15 logger2 = logging.Logger('B', level=40)
    16 logger2.addHandler(file_handler2)
    17 # 记录日志
    18 logger2.error('我是B系统')

猜你喜欢

转载自www.cnblogs.com/shuai-aoli/p/10987170.html