一、类的约束

  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):
pass
def 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+b
else:
raise Exception("请给我int或者float")#抛出异常,异常Exception
ret=cul(3,"麻辣烫")#Exception: 请给我int或者float

    (2)自定义异常

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

class GenderException(Exception):#定义了一个性别异常
pass class Person:
def __init__(self,name,gender):
self.name=name
self.gender=gender def 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):#自定义异常
pass for 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: 文件不在押

python 约束与异常处理的更多相关文章

  1. python -- 约束、异常处理、MD5

    1.类的约束       1.写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束,必须重写该方法 def login(se ...

  2. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  3. Python基础---python中的异常处理

    Python中的异常处理 一.什么是异常处理 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) ...

  4. [Python Study Notes]异常处理

    正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...

  5. Python系列之 - 异常处理

    python提供的异常处理 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常 ...

  6. pyhon基础之约束和异常处理:

    约束和异常处理:内容梗概: 1. 类的约束 2. 异常处理 3. 自定义异常 4. 日志 1. 类的约束定义:约束是对类的约束常用方法:1. 提取父类.然后在父类中定义好方法.在这个方法中什么都不用干 ...

  7. Python异常和异常处理

    Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...

  8. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  9. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...

随机推荐

  1. SVN 安装后右键出现点击鼠标右键弹出错误提示:CrashHandler initialization error

    SVN 安装后右键出现点击鼠标右键弹出错误提示:CrashHandler initialization error 原因是目标文件夹中缺少SendRpt.exe文件 解决方案:找svn是好的的同事将b ...

  2. 部署WebService

    IIS6环境下部署WebService(部署虚拟目录) 首先,打开IIS管理器, 部署一个网站或者使用默认网站 右击网站选择新建虚拟目录 输入WebService的别名 选择WebService文件路 ...

  3. T-SQL基础(四)之集合运算

    三个运算符 T-SQL支持三个集合运算符:UNION.INTERSECT.EXCEPT. 集合运算符查询的一般形式如下: Query1 <set_operator> Query2 -- 这 ...

  4. async,await,Task 的一些用法

    async,await,Task 的一些用法 private void Form1_Load(object sender, EventArgs e) { Display(); } public asy ...

  5. git merge 和 git merge --no-ff的区别

    git merge –no-ff 可以保存你之前的分支历史.能够更好的查看 merge历史,以及branch 状态. git merge 则不会显示 feature,只保留单条分支记录. 比如:我当前 ...

  6. STM32-对芯片启动读保护,实现加密(详解)

    STM32可以对存储在flash上的程序进行读保护. 启动读保护后,用户就不能再读写程序了. 所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序 头文件位于:#i ...

  7. java8 Stream sorted()的一次调用链记录

    代码 public static void main (String[] args) { Stream.of("d2", "a2", "b1" ...

  8. confidence interval

    95%置信区间.置信区间的两端被称为置信极限.对一个给定情形的估计来说,置信水平越高,所对应的置信区间就会越大. 对置信区间的计算通常要求对估计过程的假设(因此属于参数统计),比如说假设估计的误差是成 ...

  9. Java 注解原理

    下面来看看Java中注解是如何实现的 创建注解类Inter: 创建测试类Test: 在程序第二句设置断点,可以看到: 可以看到,注解的实例是一个动态代理类的对象. 要想查看这个动态代理类,可以在代码中 ...

  10. JS中的可枚举属性与不可枚举属性以及扩展

    在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...