python摸爬滚打之day19----类的约束, 异常处理
1、类的约束
父类对子类某些功能的约束.
python 中的两种约束:
1, 提取父类, 然后在父类中定义好方法, 该方法什么都不用干, 就通过主动抛出异常 raise NotImplementedError, 所有的子类必须重写此方法, 否则访问时就会抛出异常(推荐使用).
class Base:
def login(self):
raise NotImplementedError("%s的这个对象的login功能没有实现" %(self.name)) class Admin(Base):
def __init__(self,name):
self.name = name
def login(self): # 重写login方法,就直接运行自己类里面的login()方法.
print("login登录") class Root(Base):
def __init__(self,name):
self.name = name
def denglu(self): # 没有重写login()方法,只能运行父类的login, 然后父类里login()抛异常
print("root登录") class Normal(Base):
def __init__(self,name):
self.name = name
def login(self):
print("normal登录") def test(obj):
obj.login() a = Admin("admin")
r = Root("root")
n = Normal("normal")
test(a)
test(r)
test(n)
父类抛异常约束
2, 父类是一个抽象类, 在父类中给出一个抽象方法, 子类必须重写我父类中的抽象方法, 否则子类也是一个抽象类, 无法实例化.
from abc import ABCMeta,abstractmethod
class Fruit(metaclass=ABCMeta):
@abstractmethod
def color(self):
pass class Peach(Fruit):
def color(self): # 在子类中必须重写抽象父类中的抽象方法, 否则子类也不会实例化对象
print("桃子是桃红色的") class Apple(Fruit):
def yanse(self):
print("苹果是苹果金的") def color(obj):
obj.color() f = Fruit() # TypeError: Can't instantiate abstract class Fruit with abstract methods color
# Fruit是一个抽象类, 对于抽象类是不能实例化的. p = Peach()
a = Apple() # 没有重写父类的抽象方法,所以Apple类也是一个抽象类, 无法实例化对象
color(p)
color(a)
抽象父类和抽象方法约束
2、异常处理
2.1 主动抛出异常: raise Exception("....出错") ----> 实例化一个异常对象并主动抛出, raise后面的代码不执行.
2.2 结构:
try:
可能出错的代码块
except 错误类1 as 异常别名:
出错了怎么办...
except 错误类2 as 别名:
出错了怎么办...
else:
不出措时执行的代码
finally:
收尾代码
异常处理机制: 代码在运行时, 如果出错系统会直接抛出异常对象, 被except拦截, 并把接受到的错误对象赋值给e, 并将错误信息写进堆栈信息里, 日志记录时将错误信息提取出来,进行记录.
import traceback
# 异常处理
def calc(a,b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
return a+b
else:
raise Exception("你给的参数有问题") #主动抛出异常对象, Exception("......")是Exception这个类的实例化结果.
# 在出错时直接将错误拦截,强制将错误对象按给的("......")实例化在pycharm展示.
try:
print(calc(5,""))
except Exception as e: # e,是捕获的错误对象, 里面封装这错误信息.
ret = traceback.format_exc() # 从堆栈信息里调取错误信息, 一般将其写进日志.
print(ret)
print("这没法算,没得算")
异常处理机制
当一些错误信息不能满足时, 可以自定义错误类(极其不推荐)
# 自定义错误
class AgeException(Exception):
pass class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def watch_movie(self):
if self.age < 18:
raise AgeException("年龄未满十八岁")
else:
print("史上最血腥最十八禁的电影放映开始...")
while 1:
try:
name = input("姓名:")
age = int(input("年龄:"))
obj = Person(name,age)
obj.watch_movie()
except AgeException as e:
print("你年龄都未满18岁看个毛")
except ValueError as e:
print("你不是年龄的数字能和18相比吗")
except Exception as e:
print("其他错误")
自定义错误
python摸爬滚打之day19----类的约束, 异常处理的更多相关文章
- python之路--类的约束, 异常处理, MD5, 日志处理
一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...
- python基础学习笔记——类的约束
⾸先, 你要清楚. 约束是对类的约束. 用一个例子说话: 公司让小明给他们的网站完善一个支付功能,小明写了两个类,如下: class QQpay: def pay(self,money): print ...
- python记录_day019 类的约束 异常处理 日志
一 .约束 python中约束有两种 第一种,通过抛异常进行约束,这种是子类不按我要求的来,我就给你抛异常(推荐) 操作:提取一个父类. 在父类中给出一个方法.但在方法中不给出任何代码,直接抛异常 # ...
- python学习笔记:第19天 类的约束、异常、MD5和logging
目录 一.类的约束 二.异常处理: 三.MD5加密 四.日志(logging模块) 一.类的约束 真正写写项目的代码时都是多人协作的,所以有些地方需要约束程序的结构.也就是说,在分配任务之前就应该把功 ...
- 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理
一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...
- 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 ...
随机推荐
- SNF软件开发机器人-子系统-功能-功能类型(普通表改为树型表)
功能类型(普通表改为树型表) 功能类型分为普通功能和树形功能.因为资源表中不存在ParentId字段,故只能将多表的主表改为树型表. 1.效果展示: 2.使用说明: (1)当需要用一张普通的资源表显示 ...
- [k8s]k8s内容索引
我会陆陆续续小结下. dns相关 dns策略 1.集群内 2.指定内网 subdomain 3.访问互联网 resovel.conf kube-dns架构图解及策略 nginx-ingress: DN ...
- 10款WordPress的插件让你的网站的移动体验
随着科技的不断发展,需要改变营销策略的一个企业就变得非常重要.你不能指望用你的营销工具来留住你的客户.智能手机和平板电脑已经改变了消费者的行为方式.现在,人们甚至不想去他们的电脑或笔记本电脑,以检查产 ...
- 从零开始搭建FAQ引擎--基于ES的字面匹配
从零开始搭建FAQ引擎--基于ES的字面匹配
- C语言 · FBI树
算法训练 FBI树 时间限制:1.0s 内存限制:256.0MB 锦囊1 二叉树. 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I ...
- Spring Boot 调用 MongoRepository时报org.springframework.beans.factory.NoSuchBeanDefinitionException错误的解决办法
这个问题整整折腾了我两天,现在记录下来,希望可以帮助和我一样,遇到相同问题的小伙伴. 项目是分层的(Intellij IDEA中的模块Module),有API(Core)层,Service&D ...
- Android 解析未知格式的json数据
1.递归一有的时候我们需要解析未知的json.或者说是动态的json.那么我们并不知道key具体是多少,或者说key不是固定的.这时候就需要解析动态key的方法. 这个方法是我在实现解析前台传入的js ...
- 【转】app之YdbOnline说明文档
概述 YdbOnline是面向网页开发者提供的网页开发工具包. 通过使用YdbOnline,网页开发者可借助YdbOnline高效地使用语音.位置等手机系统的能力,同时可以直接使用清除缓存.扫一扫等A ...
- JS中常用的Math方法
1.min()和max()方法 Math.min()用于确定一组数值中的最小值.Math.max()用于确定一组数值中的最大值. alert(Math.min(2,4,3,6,3,8,0,1,3)); ...
- 【Excel】读取固定长文本
'******************************************************************************* ' 固定長形式テキストファイルを読み込 ...