python编程基础之三十五
系统的魔术方法:系统的魔术方法特别多,但是也都特别容易懂,简单的讲就是对系统的内置函数进行重写,你需要什么效果就重写成什么样,
比如说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编程基础之三十五的更多相关文章
- python编程基础之三十
时间模块: 时间戳:就是当前是键距离1970年1月1日0:0:0的秒数,后面还带小数,可以说是非常精确 时间的表示形式: a.以整数或者浮点数表示一个以秒为单位的时间间隔,这个时间的基础值1970.1 ...
- python编程基础之三十四
面向对象:三大特征:封装,继承,多态 封装:隐藏对象的实现过程,对外仅仅公开接口,控制在程序中的读取和修改的访问级别 类,函数都是一种封装 属性私有化:当类里面的属性不想被外部访问,可以将这些属性设置 ...
- python编程基础之三十八
正则表达式:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 需要引入内置模块r ...
- python编程基础之三十六
文件处理:文件处理包括读文件,写文件 读文件: 1.打开文件 2.读取文件 3.关闭文件 写文件: 1.打开文件 2.写如文件 3.关闭文件 无论是读取文件还是写文件都时需要打开文件,和关闭文件 打开 ...
- python编程基础之三十二
成员方法:成员方法就是一个函数,只是作用域在类内,并且第一个参数必须是self,self代表当前对象, class Dog(object): def bark(self): #成员方法,第一个参数必须 ...
- python编程基础之十五
二维列表 l1 = [[1, 2, 3], [4, 5, 6]] print(l1[0][0]) 列表负值 列表复制为两种:深复制,浅复制 浅复制:只复制容器,容器里的元素不产生副本,只是技术引用增加 ...
- VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)
鸡啄米在上一节中讲的是VS2010的菜单资源,本节主要讲菜单及CMenu类的使用. CMenu类的主要成员函数 MFC为菜单的操作提供了CMenu类,下面鸡啄米就常用的几个成员函数进行简单的介绍. B ...
- python编程基础之三十七
数据的持久化:数据持久化就是将内存中的对象转换为存储模型,以及将存储模型转换为内存中的对象的统称. 对象可以是任何数据结构或对象模型,存储模型可以是关系模型.XML.二进制流等 Python的数据持久 ...
- python编程基础之三
变量 变量定义:变量名 = 值 #不需要给定变量类型 变量命名规范:也就是标识符的命名规则, 1.由数字,字母,下划线组成,不允许数字开头 2.区分大小写 3.不能是系统保留字(keyword) 获 ...
随机推荐
- 【Offer】[44] 【数字序列中某一位的数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是 ...
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
- c语言实现数组的排序
本文章只对选择排序和冒泡排序进行介绍 选择排序实际上是从0到length-1,选择某个元素与其他的元素进行大小比较,如果大于就交换,其他情况不做操作,如图: 冒泡排序实际上是先选择某个元素,然后从 ...
- 基于SSM后台管理系统/人事管理系统
今天给大家分享一个基于SpringMVC+Mybatis+Mysql的后台管理系统,顾名思义,一个系统一般分为前台和后台,前台主要面向用户,而后台主要面向的则是管理员,后台和前台有所不同,后台的业务一 ...
- ConcurrentHashMap 的工作原理及代码实现
ConcurrentHashMap采用了非常精妙的"分段锁"策略,ConcurrentHashMap的主干是个Segment数组.Segment继承了ReentrantLock,所 ...
- vue2.0 创建项目
准备 安装淘宝 npm镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 添加系统变量path的内容 因为cnpm会被安 ...
- 使用ant编译web工程步骤
1.把写好的web工程拷贝到tomcat7.x下的webapps目录中 2.如果已经安装过ant的在doc下面直接输入:ant compile编译工程,如果成功最后会有BUILD SUCCESSFUL ...
- 一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)
#include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSor ...
- python自增自减?赋值语句返回值?逗号表达式?
咳咳,直接进入正题吧. 自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式. 熟悉C/C++的小伙伴们都知道,在C/C++中: 自增自减(前缀/后缀)运算符将实 ...
- 让我们一起学习如何使用AIDL,它其实并不难(Android)
前言 该篇文件讲述的是AIDL最基本的使用(创建.调用),关于对于AIDL更深的认识,在后续的随笔中,会持续与大家分享并探讨. 正文 AIDL的定义(什么是AIDL?) AIDL的应用场景(AIDL可 ...