一.内容回顾

  反射的另外两个内置函数 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 异常处理的更多相关文章

  1. day32 Pyhton hashlib模块 总结异常处理

    一.当用明文密码进行信息存储的时候,会导致密码的泄露,如何解决问题 通过导入hashlib模块,利用里面存在的算法对字符串进行加密计算得到一串密文的结果 1.这个过程不可逆 2.对于同一个字符串,同一 ...

  2. day32 Pyhton 模块02复习 序列化

    一. 什么是序列化 在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化 不同的序列化, 结果也不同. 但是目的是一样的. 都是 ...

  3. day32 异常处理、网络编程

    目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 ...

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

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

  5. Head First Python 学习笔记-Chapter3:文件读取和异常处理

    第三章中主要介绍了简单的文件读取和简单的异常处理操作. 首先建立文件文件夹:HeadFirstPython\chapter3,在Head First Pythong官方站点下载须要使用的文件:sket ...

  6. pyhton介绍、发展趋势、安装

    pyhton介绍.发展趋势.安装 一.python起源 ​ pyhton的创始人为吉多·范罗苏姆(Gudio van Rossum) (后文简称龟叔) ​ 1. 1989年的圣诞节期间,龟叔为了在阿姆 ...

  7. 关于.NET异常处理的思考

    年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...

  8. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  9. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

随机推荐

  1. SpringBoot2 引入 Aop

    一步小心就掉进坑里面了:SpringBoot2 引入 Aop 不生效 SpringBoot2.1.3版本 首先,引入依赖 <!--面向切面--> <dependency> &l ...

  2. pwnable——flag

    分析 此题为reverse题目,首先放入ida查看: 程序函数太少,应该加过壳 在hex view中发现程序通过upx加壳,利用upx -d 指令解压得到程序,重新放入ida查看 程序非常简单,读取f ...

  3. 关于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 换行 ...

  4. JS实现串行请求

    使用async和await var fn = async function(promiseArr) { for(let i = 0,len = arr.length; i<len; i++) { ...

  5. openwrt 单网卡路由模拟实现

    关键字 vlan openwrt 单臂路由 一直以来都认为路由器要至少要求是双网卡,因为至少要有lan/wan.最近看了单臂路由的介绍,自己在虚拟机测试了一把,发现单网口做路由器确实可行! 测试环境 ...

  6. [剑指Offer]57-和为s的数字

    题目一 输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可. 题解 关键信息是数组有序.初始化i,j指向第一个和第二个数,与S比较,若小了, ...

  7. 【译】Visual Studio 2019 的 Local Process with Kubernetes

    今天,我们自豪地宣布 Local Process with Kubernetes 的预览版已加入到 Visual Studio 2019 16.7 Preview 2 中.  Local Proces ...

  8. php中用面向对象的思想编写mysql数据库操作类

    最近刚入门完mysql,正好学了一阵子php就想着如何把mysql的表信息用php打印页面上.现在就把代码贴出来,以便小伙伴们参考. 先是建立mysql连接: /*建立连接*/ class datab ...

  9. python获取倒数第k个结点

    思路:定义快慢两个指针,快指针走k步后慢指针开始走,当快指针走到链表尾时快慢指针距离相隔k,倒数第K个结点就是慢指针所指的结点 # -*- coding:utf-8 -*- # class ListN ...

  10. 手写spring

    体系结构 Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部分也引入.下面的部分对在 Spring 框架中所有可用的 ...