python 异常知识点
raise from
python 在3.0 之后引入了raise from 表达式:
- raise exception from otherexception
当使用该语法时,第二个表达式指定了另一个异常类或实例,它会附加到引发异常的__cause__属性
注意:
python3.0不再支持raise Exc,Args形式,而该形式在Python2.6中仍然可用,在Python3.0中,使用 raise Exc(Args)调用。
with as
with语句格式:
- with expression [as variable]:
- with-block
variable是expression执行后返回的对象引用。
with as 作用是先执行启动程序,然后执行代码块,执行终止程序代码,无论该代码块是否引发异常。
例如:
- myfile = open(r'C:\misc\data')
- try:
- for line in myfile:
- print(line)
- finally:
- myfile.close
可以使用:
- with open(r'C;\misc\data') as myfile:
- for line in myfile:
- print(line)
自定义环境管理协议
就是自定义可以接入with语句的对象。
with语句实际工作方式:
1、计算表达式,所得到的对象称为环境管理器,它必须有__enter__和__exit__方法。
2、环境管理器的__enter方法被调用,如果as语句存在,则返回值会被赋值给as子句中的变量
3、代码块中嵌套代码会被执行。
4、如果with引发异常,__exit__(type, value, traceback)方法会被调用,如果此方法返回值为假,则异常会被重新触发,否则,异常会被终止。正常情况下,应该重新触发异常,这样的话才能传递到with语句之外。
5、如果with代码块没有引发异常,__exit__方法依然会被调用,其type、value、traceback都会以None传递。
例:
- class TraceBlock:
- def message(self, arg):
- print('running',arg)
- def __enter__(self):
- print('starting with block')
- return self
- def __exit__(self, exc_type, exc_value, exc_th):
- if exc_type is None:
- print('exited normally\n')
- else:
- print('raise an exception!', exc_type)
- return False
- with TraceBlock() as action:
- action.message('test 1')
- print('reached')
- with TraceBlock() as action:
- action.message('test2')
- raise TypeError
- print('not reached')
执行结果:
- starting with block
- ('running', 'test 1')
- reached
- exited normally
- starting with block
- ('ruTraceback (most recent call last):
- File "D:\workspace\aptana\pythonTest\test\com\cy\cyg\TraceBlock.py", line 27, in <module>
- raise TypeError
- TypeError
- nning', 'test2')
- ('raise an exception!', <type 'exceptions.TypeError'>)
python 异常知识点的更多相关文章
- python 类知识点总结
python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
- [转载] Python数据类型知识点全解
[转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...
- python 异常之进阶操作
1.文件分析 下面来做一些文件分析操作,分析整本书的信息. 知识点: string.split():将字符串分解为列表. open(filename,‘rb’)或者open(filename,enco ...
- python 异常
引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...
- #21 Python异常
前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...
- Python异常和异常处理
Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...
- python——异常except语句用法与引发异常
except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...
- JAVA项目中常用的异常知识点总结
JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...
随机推荐
- 【bzoj2329】[HNOI2011]括号修复 Splay
题目描述 题解 Splay 由于有区间反转操作,因此考虑Splay. 考虑答案:缩完括号序列后剩下的一定是 $a$ 个')'+ $b$ 个'(',容易发现答案等于 $\lceil\frac a2\rc ...
- 2月4日 考试——迟到的 ACX
迟到的 ACX 时限:1s 内存限制:128MB题目描述: 今天长沙下雪了,小 ACX 在上学路上欣赏雪景,导致上学迟到,愤怒的佘总给 ACX 巨佬出了一个题目想考考他,现在他找到你,希望你能帮帮他. ...
- 【比赛】HNOI2018 总结
一将功成万骨枯,我就是给那些队爷做基数的 一.比赛过程 Day1 看完题,暴力好打,然后就打 觉得第三题模型很好建啊,先看第三题吧(结果第三题是最..的) 图建出来,先看树的情况,设dp试一下 结果一 ...
- [COCI2011-2012#5] POPLOCAVANJE 后缀自动机
题面:洛谷 题解: 其实还可以用AC自动机做,但是没调出来,,,不知道发生了什么... AC自动机做法如下: 观察到如果我们对给定的每个串建AC自动机,那么直接拿大串在上面匹配,如果遇到了一个单词的终 ...
- BeanUtils介绍及其使用
BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中.在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一 ...
- Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)
2016年伊始,有了VR虚拟现实硬件设备: 暴风魔镜4–好奇者的新玩具 . 2015年下半年的朋友圈中各种VR.AR的新闻层次不穷,搞的我也心痒痒的:好歹咱也是职业的Unity3D程序员,高大上的O ...
- Redis的List链表类型命令
List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字.list类型其实就是一个每个子元素都是string类型的双向链表.我们可以通过push.po ...
- python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)
一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否ob ...
- c++11变长参数函数模板
By francis_hao Mar 25,2018 一个最简单的实例大概是这个样子: #include <iostream>using namespace std; /*变长参 ...
- redis-cluster 集群搭建详细指南及常见问题集合
只当个搬运工吧 搭建篇:https://www.cnblogs.com/mafly/p/redis_cluster.html 测试能用 常见问题: 1 redis操作key时出现以下错误 (erro ...