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("程序继续知悉个")
日志
原文地址:https://www.cnblogs.com/knighterrant/p/9948424.html