一、类的约束

  1、约束就是对类的约束。其实就是父类对子类进行约束,子类必须要写xxx方法。

  2、抽象:就是当我们没法对一个功能或者一个属性进行精确的表述,一般都采用抽象的方式给出。

    (1)抽象类的书写规范

from abc import ABCMeta,abstractmethod
# 引入抽象方法的模块class Base(metaclass=ABCMeta): #定义抽象类 maetaclass=ABCmeta@abstractmethod#抽象方法的关键字def 方法(self):pass

    (2)抽象类相关的知识点:

      a:一个类包含抽象方法,一定属于抽象类

      b:抽象类,可以包含正常的方法(实例方法、类方法、静态方法)

      c:抽象类不能创建对象

      d:如果子类未对父类的抽象方法进行重写,该类也是一个抽象类,无法创建对象

      f:接口,类中全都是抽象方法

from abc import ABCMeta,abstractmethod
# 引入抽象方法的模块class Base(metaclass=ABCMeta): #定义抽象类 maetaclass=ABCmeta@abstractmethod#抽象方法的关键字def he(self):passdef chi(self):print("吃什么")class Foo(Base):def shui(self):print ("睡你麻痹")
f=Foo()#Can't instantiate abstract class Foo with abstract methods he
f.shui()
# 只要类包含了抽象方法就不能创建对象

 

  2、python中约束有的两种方式:(贴吧登陆)

    (1)使用抽象类和抽象方法

from abc import ABCMeta,abstractmethod
class Base(metaclass=ABCMeta):@abstractmethod #定义一个抽象的login方法def login(self):pass
class Normal(Base):def login(self):print("普通用户登录")
class Memer(Base):def login(self):print("吧务登陆")
class Admin(Base):def login(self):print("管理员登录")

    (2)使用抛出异常,并且抛出的异常时NotImplementError。这样比较专业,并且错误比较明确。

#如果子类没有重写父类的方法,执行了父类的方法则抛出异常
class Base:def login(self):raise NotImplementedError("你没有重写该方法,滚回去重写")
class Normal(Base):def login(self):print("普通用户登录")
# class Memer(Base):
#     def login(self):
#         print("吧务登陆")
class Memer(Base):pass
class Admin(Base):def login(self):print("管理员登录")
n=Normal()
m=Memer()
a=Admin()
n.login()
m.login()#NotImplementedError: 你没有重写该方法,滚回去重写
a.login()

二、异常处理

  1、格式: 

try:'''进行操作'''
except Exception as e:#Exception是异常的父类,可以捕获所有的异常'''捕获异常后,给予提示语'''
else:'''try中没有出现错误,执行这里的操作'''
finally:'''不管出不出错都会执行这里的操作'''

  解读:程序先执行try中的操作,如果出错了,就会走到except里面,进行相应的操作,如果没有出错,就直接执行else里面的操作,不管出不出错都会执行最后的finally.

  2、抛出异常

    (1)关键字 raise

def cul(a,b):if (type(a)==int or type(a)==float)and (type(b)==int or type(b)==float):return a+belse:raise Exception("请给我int或者float")#抛出异常,异常Exception
ret=cul(3,"麻辣烫")#Exception: 请给我int或者float

    (2)自定义异常

      实现:定义一个异常继承Exception就可以实现自定义异常了(Exception是异常的基类,)    

class GenderException(Exception):#定义了一个性别异常passclass Person:def __init__(self,name,gender):self.name=nameself.gender=genderdef got_nan_yushi(self):'''x洗澡:return:'''if self.gender=="男":print("欢迎光临")else:raise GenderException("性别错了") #抛出自定义异常

  3、异常处理

    (1)处理除数不能是0的异常

# ZeroDivisionError
try: #把需要处理的对象放入其中print(10/0)
except ZeroDivisionError as e:print("0不能做除数")
# 异常处理结果显示:0不能做除数

     (2)获取错误信息 :traceback (目的主要是方便程序员排查错误) 

import traceback #插入堆栈模块
# traceback这个模块可以获取到我们每个⽅法的调用信息
try: #把需要处理的对象放入其中print(10/0)
except ZeroDivisionError as e:val=traceback.format_exc()#获取堆栈信息print("0不能做除数")print()print(val)
# 异常处理结果显示:0不能做除数

结果:
0不能做除数Traceback (most recent call last):File "E:/qishi/Day19 约束/04异常处理.py", line 79, in <module>print(10/0)
ZeroDivisionError: division by zero

三、日记处理

  1、基本步骤

    1. 导入logging模块.
    2. 简单配置⼀下logging
    3. 出现异常的时候(except). 向⽇志⾥写错误信息

  2、配置信息如下    

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以上的分数会被写⼊⽂件
# # 日记
# 1、导入logging模块
# 2、简单配置;一下logging
# 3、出现异常的时候,向日记里面写错误信息
import logging
import traceback
# filename: ⽂件名
# format: 数据的格式化输出. 最终在⽇志⽂件中的样⼦
# 时间-名称-级别-模块: 错误信息
# datefmt: 时间的格式
# level: 错误的级别权重, 当错误的级别权重⼤于等于leval的时候才会写⼊⽂件
logging.basicConfig(filename='x1.txt',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=20) # 当前配置表示 10以上的分数会被写⼊⽂件
# CRITICAL = 50
# FATAL = CRITICAL
# ERROR = 40
# WARNING = 30
# WARN = WARNING
# INFO = 20
# DEBUG = 10
# NOTSET = 0
# logging.critical("我是critical") # 50分. 最贵的
# logging.error("我是error") # 40分logging.warning("我是警告") # 警告 30
# logging.info("我是基本信息") # 20
# logging.debug("我是调试") # 10
# logging.log(2, "我是⾃定义") # ⾃定义. 看着给分try:ret=10/0
except ZeroDivisionError as e:print("正在写入日记")logging.error(traceback.format_exc())print("写入完毕")

  3、实例:产生10个错误,记录下来

import logging
import traceback
logging.basicConfig(filename='x1.txt',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=20) # 当前配置表示 20以上的分数会被写⼊⽂件
class JackError(Exception):#自定义异常passfor i in range(10):try:if i%3==0:raise FileExistsError("文件不在押")elif i%3==1:raise KeyError("按错了")else:raise JackError("Jack错了")except FileExistsError as e:val=traceback.format_exc()logging.error(val)print("文件丢失")except KeyError as e:val=traceback.format_exc()logging.error(val)print("瞎jb按")except JackError as e:val=traceback.format_exc()logging.error(val)except Exception:val=traceback.format_exc()logging.error(val)print("其他错误") 

      

log文件2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 44, in <module>raise FileExistsError("文件不在押")
FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 46, in <module>raise KeyError("按错了")
KeyError: '按错了'2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 48, in <module>raise JackError("Jack错了")
JackError: Jack错了2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 44, in <module>raise FileExistsError("文件不在押")
FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 46, in <module>raise KeyError("按错了")
KeyError: '按错了'2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 48, in <module>raise JackError("Jack错了")
JackError: Jack错了2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 44, in <module>raise FileExistsError("文件不在押")
FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 46, in <module>raise KeyError("按错了")
KeyError: '按错了'2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 48, in <module>raise JackError("Jack错了")
JackError: Jack错了2018-11-12 18:43:50 - root - ERROR -日记: Traceback (most recent call last):File "E:/qishi/Day19 约束/日记.py", line 44, in <module>raise FileExistsError("文件不在押")
FileExistsError: 文件不在押

转载于:https://www.cnblogs.com/angle6-liu/p/9947251.html

python 约束与异常处理相关推荐

  1. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

  2. python基础之异常处理

    python基础之异常处理 参考文章: (1)python基础之异常处理 (2)https://www.cnblogs.com/zhangyux/p/6108026.html (3)https://w ...

  3. python错误-python错误和异常处理怎处理你知道么

    原标题:python错误和异常处理怎处理你知道么 异常处理 什么是异常? 首先要清楚,什么是异常,异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常 ...

  4. python基础语法-异常处理

    python中的异常处理 类似于java 开发中很常用 异常处理的好处 大大减少了由于异常程序崩溃的发生. 三个基本语句 try:在try语句后放入可能出现问题的代码,没有问题正常执行 except: ...

  5. Python中的异常处理Try...except...finally的使用的简单理解

    python中的异常处理 1.Python中的异常处理定义 2.Try-except-finally的使用 3.代码 4.运行结果 1.Python中的异常处理定义 在程序运行的过程中,如果发生了错误 ...

  6. python学习总结----异常处理

    python学习总结----异常处理 相关概念- 错误:程序运行之前的语法错误,如:关键字.缩进不齐.括号不成对. - 异常:在程序运行过程中出现的问题,如:除数为0.对象属性不存在等.异常处理- 说 ...

  7. Python Selenium之异常处理

    Python Selenium之异常处理 参考文章: (1)Python Selenium之异常处理 (2)https://www.cnblogs.com/cnkemi/p/8985654.html ...

  8. Python基础:异常处理

    Python基础:异常处理 一,学习的内容 Python 异常处理 异常就是运行期检测到的错误.计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序 ...

  9. Python异常和异常处理

    Python中的异常处理与Java中的做法思路类似,个别细节的地方需要注意下即可,理解起来没有太大问题 try-except块及finally 异常常用小技巧: (1)在类型转换的地方检查类型转换是否 ...

最新文章

  1. 2022-2028年中国汽车俱乐部行业发展趋势与投资战略研究报告
  2. 算法与数据结构--图的实现、基本操作及应用
  3. Android Handler 流程解析
  4. TCP/IP 学习 --- 2
  5. plc维修入门与故障处理实例_电气控制基础+PLC编程入门+工程应用实例
  6. Java中大规模集合快速求和计算
  7. C++ 可变索引模板 和 template template
  8. 关于Winform中的用户代理
  9. 关于父窗口、子窗口的操作(如关闭、打开、调用方法、刷新等等)
  10. 关于opencv中的imread()函数声明
  11. [转]仿百度文库或豆丁网在线浏览doc.pdf.xls.txt源码
  12. protoc库的卸载与安装
  13. 2022-05 - 英语语法 - 16种时态终极详解
  14. Nginx+Tomcat负载均衡--win7配置详解
  15. mac brew命令汇总
  16. PHP-SDK实现微信付款码支付
  17. ShareX的使用说明
  18. 坚果手机2系统相册问题
  19. 游戏数学: 计算屏幕点中的平面上的点(上帝视角)
  20. 什么是关键业务(Mission Critical)?

热门文章

  1. getimg()在java中,java – 使用getClass()加载资源getResource()
  2. python中pillow库怎么使用_Python 图像库Pillow使用
  3. 数据结构之堆:堆的排序,Python代码实现——13
  4. java 静态代码块_关于Java你不知道的那些事之代码块
  5. 十六、MySQL流程控制结构(顺序、分支、循环)详解 强化练习
  6. jQuery实现PC端商城购物车模块基本功能(每个商品的小计和合计都会根据添加和删除的操作来动态计算)
  7. LeetCode 270. 最接近的二叉搜索树值
  8. LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)
  9. LeetCode 983. 最低票价(动态规划)
  10. 客户端显示服务器图片不显示,客户端请求服务器图片不显示