博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约束和异常处理
阅读量:4961 次
发布时间:2019-06-12

本文共 4436 字,大约阅读时间需要 14 分钟。

  我们要约束程序的结构. 也就是说. 在分配任务之前就应该把功能定义好. 然后分别交给底下的程序员来完成相应的功能.        

在python中有两种办法来解决这样的问题.

1. 提取父类. 然后在父类中定义好方法. 在这个方法中什么都不用干. 就抛⼀个异 常就可以了了. 这样所有的子类都必须重写这个方法. 否则. 访问的时候就会报

错.

2. 使⽤用元类来描述父类. 在元类中给出⼀一个抽象方法. 这样子类就不得不给出抽象方法的具体实现. 也可以起到约束的效果.

class Base:     def login(self):         raise NotImplementedError class Normal(Base):     def login(self):         print("普通账号的登陆") class Merber (Base):     def login(self):         print("吧务的登陆") class Admin(Base):     def jj(self):#抛出这个异常         print("管理员的登陆") def zhuce(obj):     obj.login() n = Normal() zhuce(n) m = Merber() zhuce(m) a = Admin() zhuce(a) 第二种用抽象方法
from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta):     @abstractmethod     def login(self):         pass     def hehe(self):         print("我会呵呵") b = Base() #报错的,原因是Base是一个抽象类,含有抽象方法,不允许创建对象 当我们需要对子类进行约束:     1.抛出异常 NotImplementedError()  没有实现   -> 约定俗成.  多观察     2.写抽象类         from abc import ABCMeta, abstractmethod         class Base(metaclass = ABCMeta):             @abstractmethod             def 方法(self):                 pass         如果一个类中包含了抽象方法. 那么这个类一定是一个抽象类         一个抽象类中可以包含正常的方法                 接口: 接口中所有的方法都是抽象方法                 子类必须重写父类中的抽象方法. 否则子类也是一个抽象类 二、异常处理 程序员是发现不了自己的错误的(边缘性错误) try:     xxxx except 错误名称 as 别名:     出现错误的时候. 要干什么... except 错误名称 as 别名:     出现错误的是偶. 要干什么 .... except Exception as e: # 所有错误的根     出现的所有的错误. 我都可以这样处理 else: # 很少用到     不出错的时候执行这里的代码 finally:     结束. 收尾工作  try:      print(1/0) #  0不能做除数   ZeroDivisionError: division by zero  except ZeroDivisionError as z:      print("错了. 除数不能为0") 由python解释器来调用代码. 出现了错误. 系统会自动的产生一个叫异常的对象.  系统会尝试着把错误返回给调用方. 过程被称为:抛异常  我们通过try...except 可以吧系统产生的这个错误获取到. 过程叫捕获异常
import traceback #计算a+b def cul(a,b):     if (type(a)==int or type(a)==float) and (type(b)==int or type(b)==float):         return a+b     else:         raise Exception("我要的不是这个") try:     print(cul(1,"aff")) except Exception as  e:     print(traceback.format_exc())#获取堆栈信息     print("出现了错误") 自定义异常
class GenderException(Exception):     pass class Person:     def __init__(self,name,gender):         self.name = name         self.gender = gender     def xizao(self):         if self.gender != "男":             raise GenderException("性别不对")         else:             print("欢迎光临") try:     p1 = Person("wusir","女")     p1.xizao() except GenderException as  e:     print("你去男澡堂干嘛") except Exception as e:     print("其他错误") MD5密文处理
 
import hashlib obj = hashlib.mad5(b"safx") obj.update("alex".encode("utf-8")) miwen = obj.hexdigest() print(miwen) 五. 日志  ⾸首先, 你要知道在编写任何⼀一款软件的时候, 都会出现各种各样的问题或者bug. 这些问 题或者bug⼀一般都会在测试的时候给处理理掉.  但是多多少少的都会出现⼀一些意想不到的异常 或者错误. 那这个时候, 我们是不知道哪⾥里里出了了问题的. 因为很多BUG都不是必现的bug. 如果 是必现的. 测试的时候肯定能测出来. 最头疼的就是这种不必现的bug. 我这跑没问题. 客户那 ⼀一⽤用就出问题. 那怎么办呢?我们需要给软件准备⼀一套⽇日志系统. 当出现任何错误的时候. 我 们都可以去⽇日志系统⾥里里去查. 看哪⾥里里出了了问题. 这样在解决问题和bug的时候就多了了⼀一个帮⼿手. 那如何在python中创建这个⽇日志系统呢? 很简单.  1. 导入logging模块. 2. 简单配置⼀一下logging 3. 出现异常的时候(except). 向日志⾥里里写错误信息.
# 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 # # ERROR = 40 # # WARNING = 30 # # WARN = WARNING # # INFO = 20 # # DEBUG = 10 # # NOTSET = 0 # 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("出错了")
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)
 
 
 

转载于:https://www.cnblogs.com/DanielYang11/p/9947356.html

你可能感兴趣的文章
【转】struts1.2的action参数配置
查看>>
快速幂&快速乘
查看>>
WebLogic 12c 多节点Cluster静默安装
查看>>
win8中如何禁用屏幕旋转的快捷键
查看>>
Solution 23: 判断矩形和圆是否相交
查看>>
Qt And MFC Mouse Over Tips
查看>>
JSP/Servlet 中的汉字编码问题
查看>>
《构建之法》(十)
查看>>
django之信号
查看>>
[noip2013]货车运输(kruskal + 树上倍增)
查看>>
简单工厂模式
查看>>
#hashMap冲突原理#详细
查看>>
基于单片机定时器---年月日时分秒的算法
查看>>
linux中IDE和SATA硬盘的区别
查看>>
关于清理缓存的解决方案
查看>>
编译时获得系统的日期和时间
查看>>
Unity3D写雷电游戏(一)
查看>>
Mybatis之使用注解开发CRUD
查看>>
C语言错误:request for member ‘xxx’ in something not a structure or union
查看>>
[LintCode] Pow(x, n) 求x的n次方
查看>>