系统的魔术方法:系统的魔术方法特别多,但是也都特别容易懂,简单的讲就是对系统的内置函数进行重写,你需要什么效果就重写成什么样,

比如说len()方法针对的对象本来没有自定义类的对象,但是当你重写了__len()__这个魔术方法时候,就可以对你需要的进行计算了,这个需要积累

这里给个例子吧

 class Dog:
def __init__(self, l):
self.l = []
self.l.extend(l)
def __len__(self):
return len(self.l) l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
d1 = Dog(l1)
print(len(d1))

魔术方法举例

异常处理:try - except语句

 try:
【代码块A】 #可能会出错误的代码 异常检测
except Exception1[ as e]: #异常处理
【代码块1】 #异常处理代码
except Exception2[ as e]: #异常处理
【代码块2】 #异常处理代码
....
except Exceptionn[ as e]: #异常处理
【代码块n】 #异常处理代码
[else:] #可选,如果没有引发异常会执行
处理语句
[finally:] #无论如何都要执行的语句
处理语句
【后续语句】

异常处理

  • except匹配顺序从上到下

  • except语句书写要求:精确的类型往前放,模糊的,不精确的往后放

  • except不带任何类型,则匹配所有类型异常,应该放到最后,吞掉异常

  • 可以将多种异常用元组的方式(异常类型1,异常类型2...异常类型n)书写,简化代码

  • except字句中e,是一个对象,打印它,会显示异常信息描述

  • try-except也可以捕获方法或函数中抛出的异常

  • 所有异常类型都继承自BaseException,使用BaseException可以将异常一网打尽

  • finally字句中可以进行一些清理工作,比如关闭文件,数据库等工作

抛出异常:手动抛出一个异常,无论哪种异常都可以带一个参数字符串,如果没有带参数,则会把异常原样抛出

 try:
raise ZeroDivisionError('除0错误')
# raise ZeroDivisionError #如果不想获取错误信息,可以不带参数
except ZeroDivisionError as e:
print(e) #除0错误

抛出异常

assert 断言:

asser 条件 [,异常描述字符串]

  执行流程:如果条件为假,则抛出AssertionError,条件为真,就当assert不存在

​  作用:对于可能出问题的代码,加上断言,方便问题排查

 print('start')
num = int(input('请输入一个1~9的整数:'))
assert 0 <num <9,'num不在1~9'
print('end')

assert断言

自定义异常:如果说系统异常类型已经无法满足自己,那么就可以写个自定义异常

  • 自己定义的异常类必须继承BaseException或Exception

  • 步骤:

    • 在自定义异常类的构造函数中,调用父类构造函数

    • 重写__str__方法输出异常信息

    • 编写异常处理方法处理异常

 class CustomError(BaseException): #继承BaseException
def __init__(self,msg):
super().__init__() #调用父类初始化
self.msg = msg #重写__str__,输出异常信息
def __str__(self):
return self.msg #3.自定义异常处理方法
def handle_exception(self):
print('异常处理') try:
raise CustomError('自定义异常')
except CustomError as e:
print(e)

自定义异常

python编程基础之三十五的更多相关文章

  1. python编程基础之三十

    时间模块: 时间戳:就是当前是键距离1970年1月1日0:0:0的秒数,后面还带小数,可以说是非常精确 时间的表示形式: a.以整数或者浮点数表示一个以秒为单位的时间间隔,这个时间的基础值1970.1 ...

  2. python编程基础之三十四

    面向对象:三大特征:封装,继承,多态 封装:隐藏对象的实现过程,对外仅仅公开接口,控制在程序中的读取和修改的访问级别 类,函数都是一种封装 属性私有化:当类里面的属性不想被外部访问,可以将这些属性设置 ...

  3. python编程基础之三十八

    正则表达式:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 需要引入内置模块r ...

  4. python编程基础之三十六

    文件处理:文件处理包括读文件,写文件 读文件: 1.打开文件 2.读取文件 3.关闭文件 写文件: 1.打开文件 2.写如文件 3.关闭文件 无论是读取文件还是写文件都时需要打开文件,和关闭文件 打开 ...

  5. python编程基础之三十二

    成员方法:成员方法就是一个函数,只是作用域在类内,并且第一个参数必须是self,self代表当前对象, class Dog(object): def bark(self): #成员方法,第一个参数必须 ...

  6. python编程基础之十五

    二维列表 l1 = [[1, 2, 3], [4, 5, 6]] print(l1[0][0]) 列表负值 列表复制为两种:深复制,浅复制 浅复制:只复制容器,容器里的元素不产生副本,只是技术引用增加 ...

  7. VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)

    鸡啄米在上一节中讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为菜单的操作提供了CMenu类,下面鸡啄米就常用的几个成员函数进行简单的介绍. B ...

  8. python编程基础之三十七

    数据的持久化:数据持久化就是将内存中的对象转换为存储模型,以及将存储模型转换为内存中的对象的统称. 对象可以是任何数据结构或对象模型,存储模型可以是关系模型.XML.二进制流等 Python的数据持久 ...

  9. python编程基础之三

    变量 变量定义:变量名 = 值  #不需要给定变量类型 变量命名规范:也就是标识符的命名规则, 1.由数字,字母,下划线组成,不允许数字开头 2.区分大小写 3.不能是系统保留字(keyword) 获 ...

随机推荐

  1. 【第十五篇】easyui datagrid的列编辑,同时插入两张表的数据进去

    看图说话. 需求:插入两张表,上面的表单是第一张表的内容,下面的两个表格是第二张详情表的内容,跟第一张表的id关联 第二张表有一个列是需要用户手动填写添加的. 国际惯例,上代码 <div id= ...

  2. CSS精灵图合成工具

    链接:http://pan.baidu.com/s/1o7OUUVo 提取密码:rmnx

  3. 查看 Linux 系统版本信息

    博客地址:http://www.moonxy.com 一.前言 Linux 下如何查看内核信息.发行版信息,系统位数.CPU 信息等等,Windows 下我们可以通过各种图形化软件来查看,但是对于 L ...

  4. pip安装路径

    pip show 模块名称 即可查看pip安装的包所在路径. 如numpy: pip show numpy

  5. zipkin+elk微服务日志收集分析系统

    docker安装elk日志分析系统 在win10上安装docker环境 tip:win7/8 win7.win8 系统 win7.win8 等需要利用 docker toolbox 来安装,国内可以使 ...

  6. uboot学习之BL3的流程

    BL2的最后通过汇编调用了board_init_r函数,此时进入BL3的阶段,此时的主要工作: 这一阶段涉及的文件及任务如下 arch/arm/lib/board.c           1. boa ...

  7. Centos利用脚本自动安装jdk

        在工作中还有自己的学习中,无论是使用tar包安装jdk,还是使用rpm安装,如果单台机器还能够接受,但是如果多台机器,就很困扰.所以,在自己配置环境的时候,根据网上各位前辈,沉淀了这样子一个脚 ...

  8. ECSHOP完美解决Deprecated: preg_replace()报错的问题

    随着PHP5.5 的普及,ECSHOP系统又爆出了新的错误.PHP发展到PHP5.5版本以后,有了很多细微的变化.而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百 ...

  9. 使用Nexus3搭建Maven私服

    1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...

  10. Github 持续化集成 工作流 Npm包自动化发布

    Github 持续化集成 工作流 Npm包自动化发布 简介   持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个: 快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误 ...