python摸爬滚打之day19----类的约束, 异常处理
程序员文章站
2022-04-14 19:17:54
1、类的约束 父类对子类某些功能的约束. python 中的两种约束: 1, 提取父类, 然后在父类中定义好方法, 该方法什么都不用干, 就通过主动抛出异常 raise NotImplementedError, 所有的子类必须重写此方法, 否则访问时就会抛出异常(推荐使用). 1 class Bas ......
1、类的约束
父类对子类某些功能的约束.
python 中的两种约束:
1, 提取父类, 然后在父类中定义好方法, 该方法什么都不用干, 就通过主动抛出异常 raise notimplementederror, 所有的子类必须重写此方法, 否则访问时就会抛出异常(推荐使用).
1 class base: 2 def login(self): 3 raise notimplementederror("%s的这个对象的login功能没有实现" %(self.name)) 4 5 class admin(base): 6 def __init__(self,name): 7 self.name = name 8 def login(self): # 重写login方法,就直接运行自己类里面的login()方法. 9 print("login登录") 10 11 class root(base): 12 def __init__(self,name): 13 self.name = name 14 def denglu(self): # 没有重写login()方法,只能运行父类的login, 然后父类里login()抛异常 15 print("root登录") 16 17 class normal(base): 18 def __init__(self,name): 19 self.name = name 20 def login(self): 21 print("normal登录") 22 23 def test(obj): 24 obj.login() 25 26 a = admin("admin") 27 r = root("root") 28 n = normal("normal") 29 test(a) 30 test(r) 31 test(n)
2, 父类是一个抽象类, 在父类中给出一个抽象方法, 子类必须重写我父类中的抽象方法, 否则子类也是一个抽象类, 无法实例化.
1 from abc import abcmeta,abstractmethod 2 class fruit(metaclass=abcmeta): 3 @abstractmethod 4 def color(self): 5 pass 6 7 class peach(fruit): 8 def color(self): # 在子类中必须重写抽象父类中的抽象方法, 否则子类也不会实例化对象 9 print("桃子是桃红色的") 10 11 class apple(fruit): 12 def yanse(self): 13 print("苹果是苹果金的") 14 15 def color(obj): 16 obj.color() 17 18 f = fruit() # typeerror: can't instantiate abstract class fruit with abstract methods color 19 # fruit是一个抽象类, 对于抽象类是不能实例化的. 20 21 p = peach() 22 a = apple() # 没有重写父类的抽象方法,所以apple类也是一个抽象类, 无法实例化对象 23 color(p) 24 color(a)
2、异常处理
2.1 主动抛出异常: raise exception("....出错") ----> 实例化一个异常对象并主动抛出, raise后面的代码不执行.
2.2 结构:
try:
可能出错的代码块
except 错误类1 as 异常别名:
出错了怎么办...
except 错误类2 as 别名:
出错了怎么办...
else:
不出措时执行的代码
finally:
收尾代码
异常处理机制: 代码在运行时, 如果出错系统会直接抛出异常对象, 被except拦截, 并把接受到的错误对象赋值给e, 并将错误信息写进堆栈信息里, 日志记录时将错误信息提取出来,进行记录.
1 import traceback 2 # 异常处理 3 def calc(a,b): 4 if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float): 5 return a+b 6 else: 7 raise exception("你给的参数有问题") #主动抛出异常对象, exception("......")是exception这个类的实例化结果. 8 # 在出错时直接将错误拦截,强制将错误对象按给的("......")实例化在pycharm展示. 9 try: 10 print(calc(5,"35")) 11 except exception as e: # e,是捕获的错误对象, 里面封装这错误信息. 12 ret = traceback.format_exc() # 从堆栈信息里调取错误信息, 一般将其写进日志. 13 print(ret) 14 print("这没法算,没得算")
当一些错误信息不能满足时, 可以自定义错误类(极其不推荐)
1 # 自定义错误 2 class ageexception(exception): 3 pass 4 5 class person: 6 def __init__(self,name,age): 7 self.name = name 8 self.age = age 9 def watch_movie(self): 10 if self.age < 18: 11 raise ageexception("年龄未满十八岁") 12 else: 13 print("史上最血腥最十八禁的电影放映开始...") 14 while 1: 15 try: 16 name = input("姓名:") 17 age = int(input("年龄:")) 18 obj = person(name,age) 19 obj.watch_movie() 20 except ageexception as e: 21 print("你年龄都未满18岁看个毛") 22 except valueerror as e: 23 print("你不是年龄的数字能和18相比吗") 24 except exception as e: 25 print("其他错误")
推荐阅读
-
python爬虫之urllib,伪装,超时设置,异常处理的方法
-
NO.7:自学python之路------类的方法、异常处理、socket网络编程
-
python记录_day019 类的约束 异常处理 日志
-
python学习笔记:第19天 类的约束、异常、MD5和logging
-
python摸爬滚打之day19----类的约束, 异常处理
-
python爬虫之urllib,伪装,超时设置,异常处理的方法
-
NO.7:自学python之路------类的方法、异常处理、socket网络编程
-
python学习笔记:第19天 类的约束、异常、MD5和logging
-
python记录_day019 类的约束 异常处理 日志
-
python中的时间处理模块(二):datetime模块之time类详解