python 约束与异常处理

一、类的约束

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI芯片发展现状及前景分析

来源&#xff1a;专知1. AI芯片定义及技术架构1.1 AI芯片定义广义上所有面向AI应用的芯片都可以称为AI芯片。目前一般认为是针对AI算法做了特殊加速设计的芯片。现阶段&#xff0c;这些人工智能算法一般以深度学习算法为主&#xff0c;也可以包括其他浅层机器学习算法[7-8]。1.…

Tableau数据分析:NC Retail Order Data(英)Data Science Program Lab#1(GTI)

Tableau数据分析&#xff1a;NC Retail Order Data&#xff08;英&#xff09; NCSU 2021 Summer Online Data Science Author&#xff1a;©Sylvan Ding

[ ZJOI 2012 ] 灾难

\(\\\) Description 给出一个食物网&#xff0c;每个生物指向的生物都是它可以捕食的对象&#xff0c;保证是图是DAG。 如果一个捕食者的所有捕食对象都灭绝了&#xff0c;那么它们也会灭绝。 求每一个动物灭绝之后&#xff0c;有多少个动物会随之灭绝。 \(n\le 65534\)Solutio…

解读:欧盟委员会2021年《人工智能法》提案

来源&#xff1a;图灵人工智能文&#xff1a;吴沈括&#xff08;北京师范大学网络法治国际中心执行主任、博导中国互联网协会研究中心副主任&#xff09;文&#xff1a;胡然&#xff08;北京师范大学网络法治国际中心研究助理&#xff09;2021年4月21日&#xff0c;为了将欧洲变…

《2021人脸识别行业白皮书》发布 拥挤安防还有多少空间?

来源&#xff1a;帮尼资讯图片来源&#xff1a;网络人脸识别在内的人工智能技术需求较大&#xff0c;这对传统安防产业带来了巨大的冲击和变革。近日&#xff0c;智慧芽联合罗思咨询&#xff0c;共同发布《2021人脸识别行业白皮书》。白皮书从人脸识别行业现状、企业聚焦和技术…

Leetcode905.Sort Array By Parity按奇偶排序数组

给定一个非负整数数组 A&#xff0c;返回一个由 A 的所有偶数元素组成的数组&#xff0c;后面跟 A 的所有奇数元素。 你可以返回满足此条件的任何数组作为答案。 示例&#xff1a; 输入&#xff1a;[3,1,2,4] 输出&#xff1a;[2,4,3,1] 输出 [4,2,3,1]&#xff0c;[2,4,1,3] 和…

第一章 计算机系统概述 1.1 计算机发展史 [计算机组成原理笔记]

第一章 计算机系统概述 1.1 计算机发展史 本笔记参考书目&#xff1a; 计算机组成原理&#xff08;第六版.立体化教材&#xff09;白中英、戴志涛2021王道计算机组成原理视频公开课 本节重点&#xff1a; 计算机硬件的发展史 转载请注明文章来源&#xff01; 什么是计算机系…

我国工业互联网 技术路线与发展趋势研究

来源&#xff1a;中国工业和信息化本文发表于《中国工业和信息化》杂志2021年4月刊总第33期作者&#xff1a;许雪荷 中国工业互联网研究院自2017年《国务院关于深化“互联网先进制造业”发展工业互联网的指导意见》发布以来&#xff0c;国家高度重视工业互联网创新发展&#…

T-SQL 之 执行顺序

T-SQL 之 执行顺序 转载于:https://www.cnblogs.com/macT/p/9952172.html

【创新应用】小图像,大图景:AI彻底改变了显微镜技术

来源&#xff1a;智能研究院20 年前&#xff0c;计算机生物学家 Anne Carpenter 在读博士时第一次意识到她需要学习计算机编程。Carpenter 说&#xff1a;「在麻省理工学院和哈佛大学的博德研究所 (Broad Institute of MIT and Harvard in Cambridge) 管理实验室的时候。她记得…

js 简单弹框toast

新建toast.js文件 function Toast(msg,duration){durationisNaN(duration)?3000:duration;var m document.createElement(div);m.innerHTML msg;m.style.cssText"max-width:60%;min-width: 150px;padding:0 14px;height: 40px;color: rgb(255, 255, 255);line-height: …

历史上12篇最著名的博士论文欣赏

来源 &#xff1a; 学位与写作Ali Gajani在mrgreek网站分享了12篇著名学者的博士论文&#xff0c;分别是居里夫人的博士论文、香浓的博士论文、纳什的博士论文、德布罗意的博士论文、费曼的博士论文、爱因斯坦的博士论文、马克思的博士论文、韦伯的博士论文、萨特兰的博士论文、…

Exalogic硬件架构

1、硬件配置见如下图表。 组件名称满配半配1/4配1/8配Sun Rack II 12421111计算节点 X2-2、X3-2、X4-2、X5-2、X6-2301684存储设备 X2-2和X3-2: Dual controller Sun ZFS Storage 7320 appliance (60 TB) X4-2和X5-2: Oracle ZS3-ES storage appliance X6-2: Oracle ZS5–ES st…

AI领域五年引用量最高的10大论文:Adam登顶,AlphaGo、Transfromer上榜

来源&#xff1a;图灵人工智能编译&#xff1a;琰琰近五年来&#xff0c;AI学术论文的投稿量和接收量都在不断攀升&#xff0c;包括NeurIPS、AAAI、ACL&#xff0c;ICML、EMNLP等国际顶会。根据权威数据统计&#xff0c;NeurIPS论文收录量在2019年呈指数级增长&#xff0c;领先…

64 求1+2+3+...+n(发散思维能力 )

题目描述&#xff1a; 求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 解题思路&#xff1a; 1&#xff09;利用&&的短路特性 2) 利用sizeof特性&#xff0c;使用公式n(n1)/2 …

Cell Reports:黄梓芮等揭示大脑皮层中通往意识的“大门”

来源&#xff1a;小柯生命北京时间2021年5月4日晚23时&#xff0c;Cell Reports在线发表美国密歇根大学一项关于前脑岛在大脑网络切换和意识通达中关键门控作用的研究——“Anterior insula regulates brain network transitions that gate conscious access”。此研究由密歇根…

第一轮冲刺第一天

今天我们完成了二维迷宫草图的制作&#xff0c;我主要负责在3dmax里画草图。 明天我将负责对二维迷宫草图的检核和完善。转载于:https://www.cnblogs.com/xuzhengdong/p/9966216.html

DeepMind强化学习新研究:更快的知识学习,更强的环境适应

来源&#xff1a;AI科技评论编译&#xff1a;Mr Bear校对&#xff1a;维克多DeepMind官方博客在一篇文章“Fast reinforcement learning through the composition of behaviours”中&#xff0c;针对强化学习中的“从头学习”问题给予了解决方案。文章中表示&#xff0c;人类处…

php 文件加载方式

两种加载文件的方式 includerequire使用场景&#xff1a; 动态加载文件的时候&#xff0c;使用include&#xff0c;否则使用require。 示例&#xff1a; # 引入php文件--include方式 inlcude("./functions_func.php"); 或 inlcude "./functions_func.php";…