day32 Pyhton 异常处理
一.内容回顾
反射的另外两个内置函数 setattr delattr
a.b=c 与 setattr(a,'b',c)相对
del a.b 与 delattr(a,'b')
两个内置函数
A,B(A),C(B)
type(c_obj) is C 只能判断出和C的关系
isinstance(c_obj,A) 不仅能判断C,还有A\B
issubclass(C,B)
内置方法
__new__ 构造方法
__init__ 初始化方法
__call__ 对象()
__del__ 析构方法 在del对象之后,删除对象之前执行
__str__ 能在打印对象时,不输出无用的内存地址,输出你需要的格式化字符串
__repr__ %r,repr(),做__str__方法的备胎
__eq__(self,other) obj1 == obj2 self 是obj1 ,other 是obj2
# item 使用中括号的形式操作对象,需要完成对应的item系列的方法
__getitem__ obj['xxx'] ==>obj.xxx
__setitem__ obj['xxx']=yyy ==>obj.xxx=yyy
__delitem__ del obj['xxx'] ==> del obj.xxx
二.今日内容
异常处理
认识 错误和异常
常见 异常和错误
如何处理异常
最基础的try...except语法
还有多分支
万能异常
else语法 没有异常执行
finally 不管有没有异常都执行
如何主动抛出异常 raise XXX
*如何定制一个属于自己的异常
断言 assert
hashlib模块 -摘要算法模块 md5算法 sha1算法
解决我们程序中一个非常不安全的因素才出现的
*configparser模块
name #NameError 错误 在写代码的时候杜绝
class A:pass #AttributeError 属性错误
缩进错误 IndentationError
int('abc')# ValueError 错误 int是整型,abc是str字符串
iterator = iter([]) # StopIteration 迭代超过最大范围 next(iterator)
多分支处理,针对不同的错误做不同的处理或者提示
try:
num = int(input('>>>'))
print(l[num-1])
except ValueError:
print('请输入一个数字')
except IndexError:
print('您输入的数字无效')
单分支处理多个异常,问题是无法知道具体的异常种类
try:
num = int(input('>>>'))
print(l[num-1])
except(ValueError,IndexError): 你处理的是一个valueError
print('你输入的内容不合法')
as语句,使用as语句得到一个错误信息的变量,使用这个变量,就可以知道错误的具体信息
try:
num = int(input('>>>'))
print(l[num-1])
except (ValuError,IndexError) as exp :
print('您输入的内容不合法')
print('悄悄记录在文件里,不要被用户发现',type(exp),exp)
在程序最外层添加一个异常处理,处理程序的所有异常
def func():
name
def main():
func()
try:
main()
except Exception as e:
print('报错了',type(e),e)#报错了 <class 'NameError'> name 'name' is not defined
如果万能异常和其他异常相遇了:万能异常永远写在多分支异常的最后
l=[1,2,3,4]
try:
num = int(input('>>>'))
print(l[num - 1])
a#万能异常
import times
except ValueError: # 你处理的是一个valueError
print('请输入一个数字')
except IndexError:
print('您输入的数字无效')
except Exception:
print('万能异常')
关于万能异常的提醒:所有的异常处理应该用最基础的最贴近的异常类型去处理它,而不应该乱用万能异常
l=[1,2,3,4]
try:
num = int(input('>>>'))
print(l[num - 1])
except ValueError: # 你处理的是一个valueError
print('请输入一个数字')
except IndexError:
print('您输入的数字无效')
else:
print('执行我啦')
# 如果try中的代码没有异常的顺利执行了,就执行else中的代码
# 记录try中的代码顺利执行
finnaly 无论如何都会执行 关闭文件\归还系统资源(网络上连接\数据库连接)
遇到return \遇到程序报错结束 都会先执行finally,再return或者报错停止运行
try:
num = int(input('>>>'))
print(l[num - 1])
except ValueError: # 你处理的是一个valueError
print('请输入一个数字')
except IndexError:
print('您输入的数字无效')
else:
print('执行我啦')
finally: # 无论如何都会执行
print('finally')
raise ImportError 主动抛出异常
在抽象类中,通过主动抛异常来约束,使程序员实现指定功能,否则报错
class A:
def func(self):
raise NotImplementedError class B(A):
def func1(self):#func()则只打印B的func,不报错
print('B的func') b = B()
b.func()#NotImplementedError
# [][10] # 报错,程序就结束了,并没有记录这个异常
try:
[][10] #报错
except Exception as exp: # except Exception
print('先记录这个错误,再抛异常',exp,type(exp)) # 先记录异常#list index out of range#<class 'IndexError'>
raise type(exp) #IndexError # 把这个异常原封不动的抛出来
什么时候用自定义异常???
import queue
q = queue.Queue()
print(q.get_nowait()) # queue.Empty
python当中内置的异常 有限的
# 它只跟一些和我们正常开发常见的逻辑相关 循环 基础数据类型
# NameError 存储在内置的命名空间中,内置命名空间在py文件执行的时候,python代码执行之前
# 这些异常是直接存储在内存中
# 有一些和特殊的功能相关的错误,就和这些特殊的功能一起放在模块中,而不是放在内置的命名空间中
# 这些模块是别人写的
class NoCourse(BaseException):
def __init__(self,msg):
self.msg = msg
def __str__(self):
return self.msg
error = NoCourse('没有这个课程')
print(error) class NoCourse(BaseException):
def __str__(self):
return '没有这个课程'
raise NoCourse()
上面自定义了一个错误,两个程序功能是一样的
断言 assert
assert 1==1 # assert bool/条件 如果是False就报错,如果是True就继续执行
print('继续执行')#继续执行
assert True
print('cuole')#cuole
assert False
print('cuole')#因为是False,所以不执行
# assert 'name' == 'alex' and 'pwd' == 'sb' # 这是一个必须满足的条件
# ...
# ...
# ...
# ...
# ...
# ...
day32 Pyhton 异常处理的更多相关文章
- day32 Pyhton hashlib模块 总结异常处理
一.当用明文密码进行信息存储的时候,会导致密码的泄露,如何解决问题 通过导入hashlib模块,利用里面存在的算法对字符串进行加密计算得到一串密文的结果 1.这个过程不可逆 2.对于同一个字符串,同一 ...
- day32 Pyhton 模块02复习 序列化
一. 什么是序列化 在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化 不同的序列化, 结果也不同. 但是目的是一样的. 都是 ...
- day32 异常处理、网络编程
目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 ...
- day25 Pyhton学习 约束和异常处理
一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...
- Head First Python 学习笔记-Chapter3:文件读取和异常处理
第三章中主要介绍了简单的文件读取和简单的异常处理操作. 首先建立文件文件夹:HeadFirstPython\chapter3,在Head First Pythong官方站点下载须要使用的文件:sket ...
- pyhton介绍、发展趋势、安装
pyhton介绍.发展趋势.安装 一.python起源 pyhton的创始人为吉多·范罗苏姆(Gudio van Rossum) (后文简称龟叔) 1. 1989年的圣诞节期间,龟叔为了在阿姆 ...
- 关于.NET异常处理的思考
年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 异常处理汇总 ~ 修正果带着你的Net飞奔吧!
经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...
随机推荐
- Fabric1.4 架构和原理
#1.Fabric总体架构Fabric架构主要包括三个模块:会员(Membership),区块链(Blockchan)和链码(chaincode). 1.1成员服务 包含下列组件:注册.身份认证管理及 ...
- SpringBoot+Shiro+JPA+LayUI的后台管理系统
一.系统说明 资源下载路径:https://download.csdn.net/download/qq_37171817/12056804 本系统是一个用SpringBoot做后台开发框架,Shiro ...
- Unity接入多个SDK的通用接口开发与资源管理(三)
接着上篇,介绍SDK资源的导入.首先介绍一下Android Studio工程. AS工程可以由多个Module组成,我们可以把某个Module作为我们打包的Module,其他的Module当做资源导入 ...
- [LeetCode]1083. 销售分析 II(Mysql,having+if)
题目 编写一个 SQL 查询,查询购买了 S8 手机却没有购买 iPhone 的买家. 题解 使用having + sum+if,而不是自查询. 代码 # Write your MySQL query ...
- [LeetCode]72. 编辑距离(DP)
题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1 ...
- [Java核心技术]五-继承(枚举类)
####Java枚举类型(enum) 枚举类型都是继承了Enum类(是一个抽象类)的一个类,我们可以向enum类中添加方法和变量等.编译再反编译可以看到枚举类型对应的类的内容. 每个枚举常量都对应一个 ...
- [补题][Codeforces478D]Red-Green Towers(DP)
题目链接 http://codeforces.com/problemset/problem/478/D 题意 叠放塔:有红.绿两种色块.从第一层开始,第一层1块,第二层2块,第i层i块. 要求每一层只 ...
- algorithm入门算法中的常见问题
KMP算法(next数组) 二分查找(非递归) /** * 二分查找(非递归) * @param arr 从小到大的排序数组 * @param target 目标查找值 * @return */ pu ...
- 论如何学习Extjs
可能现在学习Extjs相比于Vue,在网上的资料要少很多,不过一些旧的视频还是可以帮助你们了解到Extjs是怎么回事. 这里讲一下自己是如何开始学习Extjs语言的: 1.先从Ext的中文文档中学习怎 ...
- python的运算符及数据类型的转换
python 目录 python 1.算术运算符 2.比较运算符 3.赋值运算符和复合赋值运算符 4.位运算符 5.逻辑运算符 6.成员运算符 7.身份运算符 8.常见的数据类型转换 1.算术运算符 ...