博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二十八天笔记
阅读量:6894 次
发布时间:2019-06-27

本文共 2573 字,大约阅读时间需要 8 分钟。

1. 什么是异常处理     异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常 没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止 异常包含三个部分: 1. traceback异常的追踪信息 2. 异常的类型 3. 异常的信息 错误分为两大类 1. 语法上的错误:在程序运行前就应该立即修正 2. 逻辑上的错误 2. 为何要异常处理 避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性 3. 如何异常处理 try: 代码1 代码2 代码3 ...... except NameError: 当 抛出的异常是NameError时执行的子代码块 except ....: pass except ...: pass else: pass finally: pass
异常处理的单分支 try:     print('=====1')  print('=====2') print('=====3') d = { 'x': 1, 'y': 2} # d['z'] # KeyError print('=====4') l = [1, 2, 3] l[1000] # IndexError print('=====5') except IndexError: print('IndexError') print('other code') 结果: =====1 =====2 =====3 =====4 IndexError other code
异常处理的多分支 try: print('=====1') print('=====2') print('=====3') d = { 'x': 1, 'y': 2} # d['z'] # KeyError print('=====4') l = [1, 2, 3] l[1000] # IndexError print('=====5') except KeyError as e: print('KeyError',e) except IndexError as e: print('IndexError',e) print('other code')
结果: =====1 =====2 =====3 =====4 IndexError list index out of range other code (会往下运行,如果不是keyError和 IndexError的错,就会不打印other code) 万能异常类型Exception:可以匹配任意类型的异常 try... else... else必须放到后面,else的子代码块会在被检测的代码没有异常的情况下执行
finally:无论被检测的代码有没有异常都会执行
主动触发异常
 
自定义异常类型(了解) class MyException(BaseException):       def __init__(self,msg):     super().__init__()     self.msg=msg   def __str__(self):   return '<%s>' %self.msg raise MyException('我自定义的异常') 断言(了解) print('上半部分,生产数据') l=[1,2,3,4] if len(l) != 5:    raise TypeError('列表的长度必须为5') assert len(l) == 5 print('下半部分,处理数据')
1 什么是元类: # 源自一句话:在python中,一切皆对象,而对象都是由类实例化得到的 对象tea1是调用OldboyTeacher类得到的,如果说一切皆对象,那么OldboyTeacher也是一个对象,只要是对象 都是调用一个类实例化得到的,即OldboyTeacher=元类(...),内置的元类是type 关系: 1. 调用元类---->自定义的类 2. 调用自定义的类---->自定义的对象
class关键字创建自定义类的底层的工作原理,分为四步 1. 先拿到类名:'OldboyTeacher' 2. 再拿到类的基类们:(object,) 3. 然后拿到类的名称空间???(执行类体代码,将产生的名字放到类的名称空间也就是一个字典里,补充exec) 4. 调用元类实例化得到自定义的类: OldboyTeacher=type('OldboyTeacher',(object,),{...}) 自定义类的三个关键组成部分: 1. 类名 2. 类的基类们 3. 类的名称空间
不依赖class关键字创建一个自定义类 # 1. 拿到类名 class_name='OldboyTeacher' #2. 拿到类的基类们 (object,) class_bases=(object,) #3. 拿到类的名称空间 class_dic={} 控类的产生 # 1.类名必须用驼峰体 # 2.类体必须有文档注释,且文档注释不能为空 class Mymeta(type): #但凡继承了type的类才能称之为自定义的元类,否则就是只是一个普通的类 总结:对象之所以可以调用,是因为对象的类中有一个函数__call__ #推导:如果一切皆对象,那么OldboyTeacher也是一个对象,该对象之所可以调用,肯定是这个对象的类中也定义了一个函数__call__ 实例化OldboyTeacher,或者说调用OldboyTeacher会 # 1. 先产生一个空对象 # 2. 执行__init__方法,完成对象的初始属性操作 # 3. 返回初始化好的那个对象 # 推导:调用OldboyTeacher(...)就是在调用OldboyTeacher的类中的__call__,那么在该__call__中就需要做上述三件事 自定义元类来控制类的调用(即类的实例化过程) class Mymeta(type): #但凡继承了type的类才能称之为自定义的元类,否则就是只是一个普通的类
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/zhouhao123/p/9542671.html

你可能感兴趣的文章
Java项目转换成Web项目
查看>>
截图后粘贴或拖拽上传
查看>>
较为完整的meta
查看>>
对比特币的几点怀疑
查看>>
函数式编程-尾递归、尾调用
查看>>
.Net转Java自学之路—基础巩固篇二十一(模块化思想)
查看>>
1003.Hangover
查看>>
C语言博客作业--嵌套循环
查看>>
HTML与CSS二三事
查看>>
How To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu
查看>>
简单钩子
查看>>
常用的php函数库
查看>>
lucene之排序、设置权重、优化、分布式搜索(转)
查看>>
百度地图移动版API 1.2.2版本(Android)地图偏移的最佳解决办法
查看>>
第五周总结
查看>>
spring boot ajax post 前后端
查看>>
作业1测试
查看>>
sqlite3 小结
查看>>
linux 简单命令
查看>>
深入围观MaskEdit组件
查看>>