1.类的约束(重点):
写一个父类.  父类中的某个方法要抛出一个异常  NotImplementError
# 项目经理
class Base:
    # 对子类进行了约束. 必须重写该方法
    # 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他
    def login(self):
        #     没有被实现错误
        raise NotImplementedError("你要重写一下login这个方法. 否则报错!") # 抛异常  .
 
class Member(Base):
    def login(self):
        print("我是普通人登录")
 
class BaWu(Base):
    def login(self):
        print("吧务登录")
 
class Houtai(Base):
    def login(self): # 报错, 上层程序员写代码没有按照规范来
        print("后台登录")
 
# 整合这些个功能
def deng(obj):
    obj.login()
 
m = Member()
bw = BaWu()
ht = Houtai()
 
deng(m)
deng(bw)
deng(ht)
抽象类和抽象方法:
from abc import ABCMeta, abstractmethod
class Base(metaclass = ABCMeta):
      @abstractmenthod
      def fangfa(self):
            pass
# 抽象类和抽象方法 -> java c#
# 抽象方法不需要给出具体的方法体. 抽象方法内只写一个pass就可以了
# 在一个类中如果有一个方法是抽象方法. 那么这个类一定是一个抽象类
# 抽象类中. 如果有抽象方法. 此时这个类不能创建对象
# 如果一个类中所有的方法都是抽象方法. 这个类可以被称为接口类
 
# 写一个抽象方法:导入一个模块
from abc import ABCMeta, abstractmethod
 
# 此时抽象类不能创建对象
class Animal(metaclass=ABCMeta): # 写完这东西. 就是个抽象类
    @abstractmethod # 抽象方法
    def chi(self): pass # 吃应该只是一个抽象概念. 没办法完美的描述出来吃什么东西
 
    # 抽象类中可以有正常的方法
    def dong(self):
        print("动物会动")
 
# class Cat(Animal): # 此时猫里面也有一个抽象方法, 此时的猫是创建不了对象的
#     pass
 
class Cat(Animal):
    def chi(self): # 重写父类中的抽象方法
        print("猫喜欢吃鱼")
 
a = Cat()
a.chi()
a.dong()
2.异常处理.  try cxcept   raise(重点)
try:
    代码
except  异常类:
      除了错,如何处理异常
except  异常类:
      除了错,如何处理异常
except  异常类:
      除了错,如何处理异常
else:
    当程序不出错
finally:
     不管出不出错,都要执行
处理异常: 在python中可以通过try.....except... 来处理错误
try:
    print(1 / 0)
except Exception:
    print("出错了, 出现了ZeroDivisionError")
 
print("哈哈哈哈哈哈哈") # 可以正常运行.
所有的异常的根是Exception, 所有的异常类都会默认继承Exception
try:
    print(1/10)
    # f = open("哈哈哈哈哈", mode="r")
    # d = {[]:123}
except ZeroDivisionError: # 可以处理所有错误
    print("除以0出错了")
except FileNotFoundError:
    print("文件不存在的错误")
except Exception: # 兜底的
    print("其他错误")
else: # 当try中的代码不产生任何错误的时候. 会自动的执行else里的代码
    pass
finally: # 最终. 不管出错还是不出错. 都要执行最后的finally 一般用来收尾
    print("哈哈哈哈哈哈哈哈啊哈")
如何手动抛出异常和如何自己定义异常
raise  异常类('信息')
class 类(Exception):
       pass                    自己定义异常
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 异常类(错误信息)
        raise CulException("我没办法给你处理这样的运算")
 
 
print(cul("就不放, 气死你",2))
 
 
class JackException(Exception):   如何自己定义异常
    pass
import  traceback
traceback.format_exc()
  ###用来查看堆栈信息(错误信息叫堆栈信息)
class Person:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
 
    def xizao(self):
        print(f"{self.name}在洗澡")
 
def nan_zao_tang_zi(ren):
    if ren.gender == "男":
        ren.xizao()
    else:
        raise GenderException("性别不对. 去对门看看")  # 抛异常是很重要的
 
try:
    p1 = Person("赵亚磊", "不知道")
    p2 = Person("娄鲲鹏", "男")
 
    nan_zao_tang_zi(p1)
    nan_zao_tang_zi(p2)
except GenderException:
    # ret = traceback.format_exc() # 查看堆栈信息, 看错误的
    # print(ret)
    print("出错了. 很可惜")
3.MD5 加密    
import hashlib     
obj = hashlib.md5(b'盐')
obj.update(b'要加密的内容')
print(obj.hexdigest())
md5对象
obj = hashlib.md5(b"jflkasdjklfjaskljfdfjdsakljfklajsklfjaskljfklasjklasj") # 加盐
obj.update("123456".encode("utf-8")) # 把要加密的内容给md5
print(obj.hexdigest()) # 拿到密文534b44a19bf18d20b71ecc4eb77c572f
应用
username = "wusir"
password = "3e29aa0dc8a38b43c3479566cafc3cbe"
 
# 登录
uname = input("请输入你的用户名")
upwd = input("请输入你的密码") # 123456
if uname == username and my_md5(upwd) == password:
    print("登录成功")
else:
    print("登录失败")
4.日志处理(不要记,留一份,侧重点在用)
等级:
      critical: 50
      error :40
      warning: 30
      info :  20
      debug : 10
具体格式:
import logging
 
# 配置好日志的处理, 默认就是GBK
logging.basicConfig(filename='x1.txt', # 把日志信息写入的文件名
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S', # 时间的格式
                    level=10) # 当前配置表示 10以上的分数会被写入日件
 
# 向日志文件写入内容
logging.critical("今天嫂子没有来") # 50, 几乎是最高的
logging.error("昨天嫂子来了") # 40 平时使用最多的就是他
logging.warn("气死我了") # 30  警告
logging.warning("还好吧")
logging.info("提示") # 20 级
logging.debug("开发的时候把这个开着") # 10
logging.log(999, "宝宝今天有懵逼了")
创建一个依赖操作日志的对象logger(依赖FileHandler)
import logging
 
 
# 创建一个操作日志的对象logger(依赖FileHandler)
file_handler = logging.FileHandler('l1.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=10) # 创建一个日志文件处理对象
logger1.addHandler(file_handler) # 把文件添加到日志
 
logger1.error("麻花藤明天请大家吃饭. 去不去?")
 
 
# 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')
file_handler2.setFormatter(logging.Formatter(
    fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
logger2 = logging.Logger('百度贴吧', level=logging.DEBUG)
logger2.addHandler(file_handler2)
 
logger2.error("我才不去呢. 我们在北京. 离你那么远")
举例应用:
import traceback
 
class GenderException(Exception):
    pass
 
 
class Person:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        logger1.info(f"这个人的名字是{self.name}, 这个人的性别是:{self.gender}")
 
    def xizao(self):
        print(f"{self.name}在洗澡")
 
class ZaoTang:
 
    def nan(self, ren):
        if ren.gender == "男":
            ren.xizao()
        else:
            raise GenderException("我这里要的是男人")
 
    def nv(self, ren):
        if ren.gender == "女":
            ren.xizao()
        else:
            raise GenderException("我这里要的是女人")
 
 
try:
    p1 = Person("赵亚磊", "男")
    p2 = Person("林志玲", "女")
    zaotang = ZaoTang()
    zaotang.nan(p2)
    zaotang.nv(p1)
except GenderException:
    print("走错屋里了")
    logger1.error("走错屋了.. ")
    logger1.error(traceback.format_exc()) # 把堆栈信息记录在日志文件中
 

day 20 约束 异常处理 MD5的更多相关文章

  1. python --- 20 约束 异常处理 MD5 日志

    一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继 ...

  2. 20 约束 异常处理 MD5 日志

    三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完 ...

  3. 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理

    一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...

  4. python之路--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...

  5. python 面向对象(五)约束 异常处理 MD5 日志处理

    ###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...

  6. python--类的约束,异常处理,MD5加密,日志处理logging模块

    1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...

  7. python--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...

  8. Python面向对象(约束,异常处理,md5加密)(五)

    1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplemen ...

  9. python 约束. 异常处理. MD5. 日志处理

    一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...

随机推荐

  1. Build 2016: 发布明天的云创新来服务今天的开发者

    每个企业和行业都在被云潜移默化地改变着.随着云计算的速度.规模和灵活性的不断增加,云服务带来的可能性也在不断被拓展.想象一下,通过监测传感器,一位奶农能够将他的奶牛牛奶产量提高:或是一家医院能够自动监 ...

  2. SQL Server ->> SQL Server 2016新特性之 --- Query Store

    前言 SQL Server 2016引入新的查询语句性能监控.调试和优化工具/功能 -- Query Store.以前我们发现一条查询语句性能突然下降,我们要去找出问题的所在往往需要通过调用一些DMV ...

  3. 【NLP_Stanford课堂】语言模型4

    平滑方法: 1. Add-1 smoothing 2. Add-k smoothing 设m=1/V,则有 从而每一项可以跟词汇表的大小相关 3. Unigram prior smoothing 将上 ...

  4. 如何深入理解一套MQ消息中间件

    怎样算是理解了一套MQ中间件呢?原来一知半解的我列了几个维度:demo跑起来,理解其投递次数的语义,理解其事务的特性等等.这是一种角度,但总有种看山不是山的一知半解的感觉.再问一层,比如为什么Kafk ...

  5. easyui学习笔记11—tab标签页和鼠标动作

    这篇我们看看标签页是怎么实现的,默认情况下要靠点击切换标签,也可以用鼠标切换标签选项,就是鼠标放在标签上切换. 首先看看引用的资源文件 1.资源文件 <head> <meta cha ...

  6. tftp传输可执行程序问题

    昨天搭建了板子从nfs系统启动,这样只要在开发机上编写程序编译,就可以在板子上测试运行了,编写了hello world 程序,用arm编译器编译,在主板上运行,提示出错:什么exception ((什 ...

  7. csr867x开发日记——常用软件工具介绍

    xIDE xIDE开发环境(编译器)可以被用于以下操作 查看代码 构建新应用 调试 运行 重新配置 修改 Universal Front End 通用前端 通用前端(UFE)工具用于配置DSP,ADK ...

  8. Yii的事件和行为的区别和应用

    关于 Yii 的事件和行为的描述,可参考 http://www.yiiframework.com/doc/api/1.1/CComponent 事件 事件模型就是设计模式中的“观察者模式”:当对象的状 ...

  9. Yii 多表关联relations

    1,首先多表关联是在models/xx.php的relations里配置的.而且是互配,但有区别.格式:'VarName'=>array('RelationType', 'ClassName', ...

  10. 博客改用markdown编写啦!

    如题,在某谷上交了一篇题解之后,顿时觉得\(markdown\)非常好看.