class Base: # 对子类进行了约束,必须重写该方法 def login(self): # 没有被实现错误 raise NotImplementedError('请重写login这个方法') # 抛异常 class Nomal(Base): def login(self): pass class Member(Base): def login(self): pass class Admin(Base): def denglu(self): # 报错,上层程序员没有按照规范来写代码 pass # 项目经理写的总入口,整合这些功能 def login(obj): print('准备验证码...') obj.login() print('进入主页...') n = Nomal() m = Member() a = Admin() login(n) login(m) login(a) # 报错
二、抽象类和抽象方法java
from abc import ABCMeta, abstractmethod class Base(metaclass = ABCMeta): @abstractmethod def fangfa(self): pass
# 抽象方法不须要给出具体的方法体,抽象方法内只写一个pass就能够了 # 在一个类中若是一个方法是抽象方法,那么这个类就必定是抽象类 # 在抽象类中,若是有抽象方法,此时这个类不能建立对象 # 若是一个类中全部的方法都是抽象方法,这个类能够被称为接口类 # 写一个抽象方法:导入一个模块 from abc import ABCMeta, abstractmethod # 此时抽象类不能建立对象 class Animal(metaclass = ABCMeta): @abstractmethod #抽象方法 def eat(self): pass # 抽象类中能够有正常的方法 def run(self): print('跑') # 子类必须实现父类中的抽象方法,不然子类也是抽象类,抽象类不能建立对象 # class Cat(Animal): # 此时猫里面也有一个抽象方法,此时的猫是建立不了对象的 # pass class Cat(Animal): def eat(self): print('猫喜欢吃鱼') a = Cat() a.eat() a.run()
#经常使用异常 AttributeError 试图访问一个对象没有的树形,好比foo.x,可是foo没有属性x IOError 输入/输出异常;基本上是没法打开文件 ImportError 没法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,好比当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(我的认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是因为另有一个同名的全局变量,致使你觉得正在访问它 ValueError 传入一个调用者不指望的值,即便值的类型是正确的
try: 代码 except 异常类: 出了错,如何处理异常 except 异常类: 出了错,如何处理异常 except 异常类: 出了错,如何处理异常 else: 当程序不出错 finally: 无论出不出错都要执行
try: print(1/0) f = open("哈哈", mode = 'r') d = {[]:123} except ZeroDivisionError: print('除以0出错了') except FileNotFoundError: print('文件不存在的错误') except Exception: # 兜底的 print('其余错误') else: # 当try中的代码不产生任何错误的时候,会自动地执行else里的代码 pass finally:# 最终,无论出错,仍是不出错,都要执行最后的finally,通常用来收尾 print('哈哈哈哈哈')
# 如何本身定义异常 # 随便写一个类,这个类只要继承类Exception,这个类就是一个异常类,能够做为raise对象 class CulException(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('aa',2))
# 会员买东西 import traceback # 用来查看堆栈信息 class MemberException(Exception): pass class Person: def __init__(self,name,ismember): self.name = name self.ismember = ismember def buy(self): print(f"{self.name}在买东西") def place(ren): if ren.ismember == '是会员': ren.buy() else: raise MemberException("不是会员,快去办会员吧") try: p1 = Person('zhangmeng','是会员') p2 = Person('zhouyou','不知道') place(p1) place(p2) except MemberException: ret = traceback.format_exc() # 查看对战信息,错误在那里 print(ret) print('出错了')
import hashlib # MD5须要导入这个模块 # 加密的内容(须要的是字节类型) obj = hashlib.md5(b'盐') obj.update('123456'.encode('utf-8')) # 把要加密的内容给md5 print(obj.hexdigest()) # 拿到密文
# 加密,不可逆 import hashlib # 我本身的md5对象 def my_md5(s): obj = hashlib.md5(b"dhadkfkfnsgadsjndzjb") # 加盐 obj.update(s.encode("utf-8")) # 把要加密的内容给md5 return obj.hexdigest() # print(my_md5("12345")) # 9246295b87d00ec028dfec692efb55c0 username = 'hutong' password = '9246295b87d00ec028dfec692efb55c0' # 登录 uname = input('请输入你的用户名:') upwd = input('请输入你的密码:') if uname == username and my_md5(upwd) == password: print('登录成功') else: print('登录失败')
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=40) # 当前配置表示 10以上的分数会被写入日件 # 建立一个操做日志的对象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("麻花藤明天请你们吃饭. 去不去?") 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("zhaoyalei", "男") p2 = Person("linmei", "女") zaotang = ZaoTang() zaotang.nan(p2) zaotang.nv(p1) except GenderException: print("走错屋了") logger1.error("走错屋了.. ") logger1.error(traceback.format_exc()) # 把堆栈信息记录在日志文件中