约束和异常处理:
内容梗概:
1. 类的约束
2. 异常处理
3. 自定义异常
4. 日志 1. 类的约束
定义:约束是对类的约束
常用方法:
1. 提取父类.然后在父类中定义好方法.在这个方法中什么都不用干.就抛⼀个异常就可以了.
这样所有的子类都必须重写这个方法.否则.访问的时候就会报错.
2. 使用元类来描述父类. 在元类中给出⼀个抽象方法. 这样子类就不得不给出抽象方法的具体实现. 也可以起到约束的效果. 法一:提取父类
class Base:
def login(self): # 强制子类做xxxx事
raise Exception("没有实现login的方法")
raise NotImplementedError("没有实现login的方法") #专业的写法
class admin(Base):
def login(self):
print("管理员的登录") class user(Base):
def denglu(self):
print("用户的登录")
a = admin()
a.login()
u = user()
u.login() #报错
u.denglu()
法二:抽象方法
from abc import ABCMeta,abstractmethod
class Animal(metaclass = ABCMeta):
@abstractmethod
def chi(self):
pass
class cat(Animal):
def shui(self):
print("我要睡")
def chi(self):
print("我要吃")
b = Animal() # 报错的. 原因是Base是一个抽象类. 含有抽象方法. 不允许创建对象的
c = cat()
c.chi()

  总结:

当我们需要对子类进行约束:
1.抛出异常
NotImplementedError() 没有实现 -> 约定俗成.多观察
2.写抽象类
from abc import ABCMeta, abstractmethod
class Base(metaclass=ABCMeta):
@abstractmethod
def 方法(self):
pass
如果一个类中包含了抽象方法.那么这个类一定是一个抽象类,一个抽象类中可以包含正常的方法
接口: 接口中所有的方法都是抽象方法
子类必须重写父类中的抽象方法.否则子类也是一个抽象类 2. 异常处理
处理流程:
try:
xxxx
except 错误名称 as 别名:
出现错误的时候. 要干什么...
except 错误名称 as 别名:
出现错误的是偶. 要干什么
....
except Exception as e: # 所有错误的根
出现的所有的错误. 我都可以这样处理
else: # 很少用到
不出错的时候执行这里的代码
finally:
结束. 收尾工作
解读: 程序先执行行操作,然后如果出错了了会走except中的代码.如果不出错,执行else中的代码.
不论处不出错 最后都要执行finally中的语句.一般我们用try...except就够用了了.顶多加上finally(一般用来作为收尾) 抛异常:
import traceback
# 计算a+b
def cul(a, b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
return a + b
else:
# 在这里有两种方案. 1. 直接返回 , 2. 抛出异常
# raise 抛出 Exception 错误和异常,所有错误的根
raise Exception("我要的不是这个. 你应该我传递int或者float")
try:
print(cul(1, "胡辣汤")) # 加上异常的处理
except Exception as e:
# 获取到错误信息. 我们需要访问堆栈信息
print(traceback.format_exc()) # 获取堆栈信息
print("出现了错误")

3.自定义异常:
定义:
只要你的类继承了了Exception类.那你的类就是⼀一个异常类. 就这么简单.
实例:
自定义异常
class GenderException(Exception):
pass class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender # 洗澡 -> 男的进男浴室
def goto_nan_yushi(self):
if self.gender != "男":
raise GenderException("性别不对") # 除了名字以外都是父类中的Exception
else:
print("欢迎光临.")
try:
p2 = Person("wusir", "女")
p2.goto_nan_yushi()
p1 = Person("alex", "男")
p1.goto_nan_yushi()
except GenderException as e:
print("你去男澡堂子干嘛?")
except Exception as e:
print("其他错误")
5.日志
格式:
import logging
# filename: ⽂件名
# format: 数据的格式化输出. 最终在⽇志⽂件中的样⼦
# 时间-名称-级别-模块: 错误信息
# datefmt: 时间的格式
# level: 错误的级别权重, 当错误的级别权重⼤于等于leval的时候才会写⼊⽂件
logging.basicConfig(filename='x1.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=30)
# 当前配置表示 0以上的分数会被写⼊⽂件
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("我是warning")
logging.info("我是info")
logging.debug("我是debug")
logging.log(1, "我什么都不是")
实例:
import traceback
try:
print(1/0)
except Exception:
logging.error(traceback.format_exc()) # 用法
print("出错了")
当一个系统有两个子文件时,可采用这种方式分开记录,方便查找
import logging
创建⼀个操作⽇志的对象logger(依赖FileHandler)
file_handler = logging.FileHandler('zuo.log', 'a', encoding='utf-8') # open()
file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"))
logger1 = logging.Logger('A系统', level=20)
logger1.addHandler(file_handler) # 把文件助手和日志对象绑定
logger1.error('我是A系统出错了') # 记录日志 再创建⼀个操作⽇志的对象logger(依赖FileHandler)
file_handler2 = logging.FileHandler('you.log', 'a', encoding='utf-8')
file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
logger2 = logging.Logger('B系统', level=20)
logger2.addHandler(file_handler2) logger2.error('我是B系统出错了')
import traceback
try:
print(1/0)
except Exception:
logger2.error(traceback.format_exc()) #常见搭配用法
print("出错了. 请联系管理员")
print("程序继续执行")
												

pyhon基础之约束和异常处理:的更多相关文章

  1. python 约束与异常处理

    一.类的约束 1.约束就是对类的约束.其实就是父类对子类进行约束,子类必须要写xxx方法. 2.抽象:就是当我们没法对一个功能或者一个属性进行精确的表述,一般都采用抽象的方式给出. (1)抽象类的书写 ...

  2. Oracle基础 PL-SQL编程基础(4) 异常处理

    异常处理: 即使良好的PL-SQL程序也会遇到错误或者未预料的事件,一个优秀的程序都应该能够处理各种出错情况,尽可能的从错误中恢复.程序在运行时出现的错误成为异常.发生异常后,语句讲终止执行,PLSQ ...

  3. SQL基础--> 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  4. 零基础学Python--------第9章 异常处理及程序调试

    第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...

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

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

  6. day 018 面向对象--约束和异常处理

    ---恢复内容开始--- 主要内容; 类的约束 异常处理 自定义异常 MD5加密 日志 一  类的约束 (约束是对类的约束,) 看个例子: 这是领导分配给每个人的项目,要求每人写个功能 结果如下: 例 ...

  7. day25 Pyhton学习 约束和异常处理

    一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...

  8. Swift基础--Swift中的异常处理

    Swift中的异常处理 OC中的异常处理:方法的参数要求传入一个error指针地址,方法执行完后,如果有错误,内部会给error赋值 Swift中的异常处理:有throws的方法,就要try起来,然后 ...

  9. SQL基础(2)-约束

    1. 添加主键约束 a.创建表时添加主键(默认系统命名主键) create table pt_ticket_info( id varchar2(50) primary key not null, -- ...

随机推荐

  1. UVA 10382 Watering Grass(区间覆盖,贪心)题解

    题意:有一块草坪,这块草坪长l 米,宽 w 米,草坪有一些喷头,每个喷头在横坐标为 p 处,每个喷头的纵坐标都是(w/2) ,并且喷头的洒水范围是一个以喷头为圆心,半径为 r 米的圆.每次最少需要打开 ...

  2. Could not stop Cortex-M device! please check the JTAG cable的解决办法

      今天程序烧录后,进行调试时keil提示:Could not stop Cortex-M device!  please check the JTAG cable   如图: 于是我在网上搜了一下, ...

  3. .Net Core 全球化&本地化的使用

    官网文档 nuget地址 创建资源文件 添加资源文件 实施策略 配置本地化 本地化中间件 使用 视图本地化 DataAnnotations 本地化 Make the app's content loc ...

  4. kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources

    Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...

  5. java web项目在linux部署、启动,查看系统配置常用的linux命令总结

    本文为博主原创,未经允许不得转载: 以下为在工作中常用的linux命令进行了总结,主要在项目安装及启动,及编辑部署文件时应用较多1.gz文件是一种压缩文件. 以·tar.gz为扩展名的是一种压缩文件, ...

  6. VHDL 例程

    以下程序未经仿真,仅供说明 语法 声明参考库ieee,使用ieee中的std_logic_1164包全部条目可见 library ieee; use ieee.std_logic_1164.all; ...

  7. 初步:jenkins自动构建安卓Apk

    1:本地搭建jenkins 2:下载插件 3:配置相关信息(git,sdk等等) 3:拉取git仓库代码 4:编译执行 参考文章:http://www.cnblogs.com/reblue520/p/ ...

  8. Codeforces 785E. Anton and Permutation

    题目链接:http://codeforces.com/problemset/problem/785/E 其实可以CDQ分治... 我们只要用一个数据结构支持单点修改,区间查询比一个数大(小)的数字有多 ...

  9. android:ems="10"是什么意思

    android:ems = " 设置TextView或者Edittext的宽度为10个字符的宽度.当设置该属性后,控件显示的长度就为10个字符的长度,超出的部分将不显示. xml中 andr ...

  10. linux df

    显示磁盘使用情况 [hadoopuser@CNSZ443239 ~]$ df   文件系统                            1K-块           已用      可用 已 ...