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 ...
随机推荐
- SpringBoot2 引入 Aop
一步小心就掉进坑里面了:SpringBoot2 引入 Aop 不生效 SpringBoot2.1.3版本 首先,引入依赖 <!--面向切面--> <dependency> &l ...
- pwnable——flag
分析 此题为reverse题目,首先放入ida查看: 程序函数太少,应该加过壳 在hex view中发现程序通过upx加壳,利用upx -d 指令解压得到程序,重新放入ida查看 程序非常简单,读取f ...
- 关于HTML基本标签,了解一下!
目录 1 前言 2 正文 2.1 HTML文档结构 2.1.1 html标签 2.1.2 head标签 2.1.3 title标签 2.1.4 body标签 2.2 HTML常用标签 2.2.1 换行 ...
- JS实现串行请求
使用async和await var fn = async function(promiseArr) { for(let i = 0,len = arr.length; i<len; i++) { ...
- openwrt 单网卡路由模拟实现
关键字 vlan openwrt 单臂路由 一直以来都认为路由器要至少要求是双网卡,因为至少要有lan/wan.最近看了单臂路由的介绍,自己在虚拟机测试了一把,发现单网口做路由器确实可行! 测试环境 ...
- [剑指Offer]57-和为s的数字
题目一 输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可. 题解 关键信息是数组有序.初始化i,j指向第一个和第二个数,与S比较,若小了, ...
- 【译】Visual Studio 2019 的 Local Process with Kubernetes
今天,我们自豪地宣布 Local Process with Kubernetes 的预览版已加入到 Visual Studio 2019 16.7 Preview 2 中. Local Proces ...
- php中用面向对象的思想编写mysql数据库操作类
最近刚入门完mysql,正好学了一阵子php就想着如何把mysql的表信息用php打印页面上.现在就把代码贴出来,以便小伙伴们参考. 先是建立mysql连接: /*建立连接*/ class datab ...
- python获取倒数第k个结点
思路:定义快慢两个指针,快指针走k步后慢指针开始走,当快指针走到链表尾时快慢指针距离相隔k,倒数第K个结点就是慢指针所指的结点 # -*- coding:utf-8 -*- # class ListN ...
- 手写spring
体系结构 Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部分也引入.下面的部分对在 Spring 框架中所有可用的 ...