所学内容

异常处理(常用)

AttributeError ··························  试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError ·······································  输入/输出异常;基本上是无法打开文件
ImportErro ································· 无法引入模块或包;基本上是路径问题或名称错误
IndentationError ····················   语法错 误(的子类) ;代码没有正确对齐
IndexError  ································  下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError ·····································  试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C ···· 被按下
NameError ································· 使用一个还未被赋予对象的变量
SyntaxError Python ················· 代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError ···································· 传入对象类型与要求的不符合
UnboundLocalError ················· 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError ··································· 传入一个调用者不期望的值,即使值的类型是正确的

元类

1 什么是元类:
 源自一句话:在python中,一切皆对象,而对象都是由类实例化得到的

2 关系:
 1. 调用元类---->自定义的类
 2. 调用自定义的类---->自定义的对象

class关键字创建自定义类的底层的工作原理,分为四步
 1. 先拿到类名
 2. 再拿到类的基类们
 3. 然后拿到类的名称空间(执行类体代码,将产生的名字放到类的名称空间也就是一个字典里,补充exec)
 4. 调用元类实例 

自定义类的三个关键组成部分:

 1. 类名
 2. 类的基类们
 3. 类的名称空间

异常处理

1、 什么是异常处理

异常是错误发生的信号,一旦程序出错就会产生一个异常, 如果该异常没有被应用程序处理,那么该异常就会抛出来,程序也随之终止

  异常包含三个部分:traceback 异常的追踪信息,异常的类型,异常的信息

  错误分为两大类:

      语法的错误:在程序运行前就应该立即修正

      逻辑的错误:

2、为何要异常处理

避免程序因为异常崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性

3、如何异常处理

 # 异常处理的单分支
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') 异常处理的多分支
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')

元类

对象tea1是调用OldboyTeacher类得到的,如果说一切皆对象,那么OldboyTeacher也是一个对象,只要是对象
都是调用一个类实例化得到的,即OldboyTeacher=元类(...),内置的元类是type

 class OldboyStudent:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def score(self):
print('%s is scoring' %self.name) tea1=OldboyTeacher('nuanxin',21,'male')
# print(type(tea1))
print(type(OldboyTeacher))

自定义类的三个关键组成部分:

 # 不依赖class关键字创建一个自定义类
# 1. 拿到类名
class_name='OldboyStydent'
#2. 拿到类的基类们:(object,)
class_bases=(object,)
#3. 拿到类的名称空间
class_dic={}
class_body="""
school = 'Oldboy' def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def score(self):
print('%s is scoring' %self.name)
"""
exec(class_body,{},class_dic)
print(class_dic)
#4. 调用type得到自定义的类
OldboyTeacher=type(class_name,class_bases,class_dic) print(OldboyTeacher)
# print(OldboyTeacher.school)
# print(OldboyTeacher.score) tea1=OldboyTeacher('nuanixn',20,'male')
print(tea1.__dict__)

最新文章

  1. iOS开发系列--Objective-C之协议、代码块、分类
  2. 手动编译安装docker环境,以及偶尔出现的bug
  3. 【回文串-Manacher】
  4. cocos2dx中android下动态更新.so文件
  5. springmvc学习(一)helloworld实例
  6. spring boot 实践
  7. YII 框架使用之——创建应用
  8. linux网络编程之TCP/IP基础
  9. HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)
  10. GUI测试要点
  11. PHP的一些 有用但不常用的函数记录
  12. <script>标签中的 defer 与 async区别
  13. 如何使用Android Studio在安卓平台对Unity开发的应用进行性能检查?
  14. 为什么以sys无法远程登录数据库
  15. IDEA一定要懂的32条快捷键
  16. git init github
  17. [20171121]rman backup as copy 2.txt
  18. Vim 8.0
  19. try except else
  20. 安装luasocket 的正确姿势

热门文章

  1. LeetCode--不同路径
  2. JAVA如何获得数据库的字段及字段类型
  3. 原型&&原型链一语道破梦中人
  4. PAT 1034. Head of a Gang
  5. 4、ceph-deploy之配置使用对象存储
  6. hdu_1272_小希的迷宫_201403091527
  7. 《MySQL 5.7 Replication新特性》分享之互动问题解答
  8. 解决vim粘贴时格式混乱的问题
  9. Java中接口和抽象类的比較
  10. luogu1268 树的重量