一.内容回顾

  反射的另外两个内置函数 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. MongoDB基础总结

    1.数据可基本操作 1. 创建数据库 use  databaseName 选择一个数据库,如果数据库不存在就自动创建一个数据库 只有向数据库中插入数据时,数据库才会被真实创建出来,而当数据库中没有数据 ...

  2. Win10更新后蓝牙出现故障的解决方法

    昨天Win10自动更新后,我发现我的键盘突然就不管用了,检查了一下发现原来蓝牙没有打开,同时任务栏中的蓝牙图标也不见了. 不久之前,这样的情况已经出现过了一次,那次好像更新系统后就好了,但这次是系统更 ...

  3. do...while 循环

    语法 C 语言中 do...while 循环的语法: do { statement(s); }while( condition ); 请注意,条件表达式出现在循环的尾部,所以循环中的 statemen ...

  4. git 快速入门及常用命令

    身为技术人员,都知道Git是干嘛的.从服务端角度它是代码仓库,可以多人协作.版本控制.高效处理大型或小型项目所有内容:从客户端讲,它能够方便管理本地分支.且与服务端代码的同步,从拉取.合并.提交等等管 ...

  5. apache-apollo启动报错

    启动Apollo后,进入网页版管理中心后报错:500: Server Error https://127.0.0.1:61681/console/index.html 网页抓包 报错:{"c ...

  6. openstack核心组件——cinder存储服务(11)

    一.cinder 介绍:   理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系 ...

  7. 刷题[安恒DASCTF2020四月春季赛]Ez unserialize

    解题思路 打开直接源码,没别的,审就完事了 代码审计 <?php show_source("index.php"); function write($data) { retu ...

  8. xss利用——BeEF#stage3(绕过同源策略与浏览器代理)

    绕过同源策略 正式进入攻击阶段.因为SOP(同源策略)的存在,BeEF只能对被勾子钩住的页面所在域进行操作.如果有办法绕过SOP,那么无疑会使攻击面放大. 绕过SOP可从两方面入手.第一个是从浏览器本 ...

  9. PHP审计基础

    php核心配置 register_globals 全局变量注册开关 设置为on时,把GET/POST的变量注册成全局变量 PHP 5.4.0中移除 allow_url_include 包含远程文件 设 ...

  10. JavaScript的this到底代表谁?(this指向哪里?)

    在很多编程语言中都有this这个特殊关键字的存在,比如Java中的this,还有本文要说到的JavaScript中的this.那么,JavaScript中this究竟有什么特性和用法呢?它又是如何定义 ...