python -- 约束、异常处理、MD5
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) # 报错
2、抽象类和抽象方法
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(''.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()) # 把堆栈信息记录在日志文件中
例子
python -- 约束、异常处理、MD5的更多相关文章
- python 约束. 异常处理. MD5. 日志处理
一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...
- 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理
一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...
- python之路--类的约束, 异常处理, MD5, 日志处理
一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...
- python 面向对象(五)约束 异常处理 MD5 日志处理
###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...
- python之约束, 异常处理, md5
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...
- python --- 20 约束 异常处理 MD5 日志
一.类的约束 1.抛出异常 NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继 ...
- python 约束,异常处理与MD5加密
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...
- Python面向对象(约束,异常处理,md5加密)(五)
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplemen ...
- python--类的约束,异常处理,MD5加密,日志处理logging模块
1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...
- day 20 约束 异常处理 MD5
1.类的约束(重点): 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementError # 项目经理 class Base: # 对子类进行了约束. 必须重写该方法 ...
随机推荐
- 大牛推荐的5本 Linux 经典必读书
今天给大家推荐5本Linux学习相关的书籍:这些书籍基本都是很多大牛推荐过,并且深受业界好评的书:虽然只有5本,但是相信把5本全都认真看过的同学应该不多吧?希望这些书能够帮助你进阶为大牛! 上期传送门 ...
- C#设计模式(7)——适配器模式(Adapter Pattern)(转)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- xslt注入
XSL(可扩展样式表语言)是一种用于转换XML文档的语言,XSLT表示的就是XSL转换,而XSL转换指的就是XML文档本身.转换后得到的一般都是不同的XML文档或其他类型文档,例如HTML文档.CSV ...
- php – Laravel 5查询关系导致“调用成员函数addEagerConstraints()on null”错误( 转载)
php – Laravel 5查询关系导致“调用成员函数addEagerConstraints()on null”错误 我一直在尝试创建一个简单的用户管理系统,但在查询关系时不断遇到障碍.例如,我 ...
- crontab定时
yum install -y vixie-cron --安装定时服务 每分钟更新一次商品crontab -e* * * * * /usr/bin/curl http://test.wadao.com/ ...
- Python实现链表
1.1实现单向链表 #链表结构分成2部分 head,tail #('a',('b',('c',none))) #迭代时候 Head is a ;;;; tail is ('b',('c',none)) ...
- JS数据类型判断的方法
最常用的判断方法:typeof var a='isString'; var b=121221; var c=[1,2,3]; var d=new Date(); var e=function(){ c ...
- Java爬取B站弹幕 —— Python云图Wordcloud生成弹幕词云
一 . Java爬取B站弹幕 弹幕的存储位置 如何通过B站视频AV号找到弹幕对应的xml文件号 首先爬取视频网页,将对应视频网页源码获得 就可以找到该视频的av号aid=8678034 还有弹幕序号, ...
- python学习笔记:*args和**kwargs使用原理?
一.*args和**kwargs原理 先看个例子: def test(*args,**kwargs): print("args =",args) print("kwarg ...
- phpstorm 安装yaf代码提示文件
安装yaf代码提示:https://www.jianshu.com/p/dc719ae74f97 4.下载代码提示文件 下载地址: https://github.com/xudianyang/yaf. ...