所学内容

异常处理(常用)

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__)

Python 29 异常处理, 元类的更多相关文章

  1. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  2. Python基础:元类

    一.概述 二.经典阐述 三.核心总结 1.类的创建过程 2.元类的使用惯例 四.简单案例 1.默认行为 2.使用元类 五.实践为王 一.概述 Python虽然是多范式的编程语言,但它的数据模型却是 纯 ...

  3. Python中的元类(metaclass)

    推荐+收藏:深刻理解Python中的元类(metaclass) 做一些笔记学习学习: 在大多数编程语言中,类就是用来描述如何生成一个对象的代码段,在Python中类也是一个对象,这个(类)对象自身拥有 ...

  4. [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式

    使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...

  5. 什么是python中的元类

    所属网站分类: python高级 > 面向对象 作者:goodbody 原文链接: http://www.pythonheidong.com/blog/article/11/ 来源:python ...

  6. Python之面向对象元类

    Python之面向对象元类 call方法: class People: def __init__(self,name): self.name=name # def __call__(self, *ar ...

  7. [Python之路] 元类(引申 单例模式)

    一.类也是对象 当我们定义一个变量或者函数的时候,我们可以在globals()的返回值字典中找到响应的映射: def A(): print("This is function A" ...

  8. Python 中的元类到底是什么?这篇恐怕是最清楚的了

    类作为对象 在理解元类之前,您需要掌握 Python 的类.Python 从 Smalltalk 语言中借用了一个非常特殊的类概念. 在大多数语言中,类只是描述如何产生对象的代码段.在 Python ...

  9. Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法

    Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...

随机推荐

  1. java 类名.this

    类名为this的限定词. 相对于内部类:有多个this: 1.内部类本身的this: 2.内部类的环境类的this: 类名.this,就是为了对这些this指针的指向做出限定. 区别于类名.class ...

  2. C# 金钱添加逗号0000

    private void Form1_Load(object sender, EventArgs e) { decimal dd = (decimal)11234567890.01; string d ...

  3. 20190625_mysql5.7查看及其解锁_被锁的表

    [root@localhost ~]# mysql -u myroot -pEnter password: mysql> show OPEN TABLES where In_use > 0 ...

  4. JSON,对象..的数据格式

    [此案例为自动产生的随机数] 对象: {a1:180,a2:721, a3:574} 序列化传值:将对象转化为Json字符串 public ActionResult Val2() { Random r ...

  5. 洛谷——P1183 多边形的面积

    P1183 多边形的面积 多边形求面积公式: $\frac {\sum_{i=0}^{n-1}(x_iy_{i+1}-y_ix_{i+1})}{2}$ #include<bits/stdc++. ...

  6. zabbix4.0搭建(基于CentOS6.8)

    环境 服务端:188.188.3.241,系统:centos6.8,mysql:5.7.3,php:5.4.9,nginx:1.12.0   一.nginx编译安装 NGINX_VERSION=1.1 ...

  7. 2.2 为什么要使用Shell脚本

        使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象.缺点是:它们的效率通常不如编译型语言.不过权衡之下,通常使用脚本编程还是值得的:花一个小时写成 ...

  8. 【 Codeforces Global Round 1 B】Tape

    [链接] 我是链接,点我呀:) [题意] x轴上有m个连续的点,从1标号到m. 其中有n个点是特殊点. 让你用k段区间将这n个点覆盖. 要求区间的总长度最小. [题解] 一开始假设我们需要n个胶带(即 ...

  9. Android音乐、视频类APP常用控件:DraggablePanel(2)

     Android音乐.视频类APP常用控件:DraggablePanel(2) 附录文章1主要演示了如何使用DraggablePanel 的DraggableView.DraggablePanel ...

  10. 清北学堂模拟赛d3t6 c

    分析:比较神奇的一道题.要把树变成环肯定要先变成链,然后把链给拼接成环.接下来考虑一个脑洞大开的树形dp:设f[i][0]表示i不与父节点相连的链数,f[i][1]表示i与父节点相连的链数,先考虑怎么 ...