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("程序继续知悉个")
有疑问可以加wx:18179641802,进行探讨