一.内容回顾

  反射的另外两个内置函数 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. 如何编写一个简单的Linux驱动(二)——设备操作集file_operations

    前期知识 如何编写一个简单的Linux驱动(一)--驱动的基本框架 前言 在上一篇文章中,我们学习了驱动的基本框架.这一章,我们会在上一章代码的基础上,继续对驱动的框架进行完善.要下载上一篇文章的全部 ...

  2. Django 页面之间传递MySql数据表(Django八)

    之前实现了页面传递多个参数,但没有实现页面间传递一整个数据表 session传递几个参数:https://blog.csdn.net/qq_38175040/article/details/10496 ...

  3. 起redis服务时报错Creating Server TCP listening socket *:6379: bind: No such file or directory

  4. Openstack 调整云主机大小失败解决

    Openstack 使用调整openstack云主机大小报错 tailf /var/log/nova/nova-compute.log 2017-02-24 18:21:29.088 28511 ER ...

  5. 集群实战(2):K8S集群节点退出加入操作

    以下报错网上其实也可以找到并解决,但是偏零碎我只是根据自己的在使用中遇到的问题做个汇总. 文章目录 首先删掉节点 node重新加入 参考文档 首先删掉节点 注意:以下操作都是在master下操作. 一 ...

  6. Vue入门到精通

    Vue.js - Day1 课程介绍 前5天: 都在学习Vue基本的语法和概念:打包工具 Webpack , Gulp 后5天: 以项目驱动教学: 什么是Vue.js Vue.js 是目前最火的一个前 ...

  7. spring mvc(2) spring mvc初体验

    前面讲到随着前端技术的发展,web的开发已经实现了前后分离,并且spring mvc经过多个版本的更新,使用上也变得不一样,并且提供了很多便捷的功能.但是为了便于理解,我们使用比较原始的方式搭建spr ...

  8. hystrix源码之概述

    概述 hystrix核心原理是通过代理执行用户命令,记录命令执行的metrics信息,通过这些metrics信息进行降级和熔断. 源码结构包括一下几个部分: 熔断器 熔断器就是hystrix用来判断调 ...

  9. Java操作Elasticsearch 之 [Java High Level REST Clientedit]

    1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json. 向 Ela ...

  10. 从零搭建Spring Boot脚手架(7):Elasticsearch应该独立服务

    1. Spring Data Elasticsearch Spring Data Elasticsearch是Spring Data项目的子项目,提供了Elasticsearch与Spring的集成. ...