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 异常知识点的更多相关文章

  1. python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

  2. python Django知识点总结

    python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...

  3. [转载] Python数据类型知识点全解

    [转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...

  4. python 异常之进阶操作

    1.文件分析 下面来做一些文件分析操作,分析整本书的信息. 知识点: string.split():将字符串分解为列表. open(filename,‘rb’)或者open(filename,enco ...

  5. python 异常

    引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...

  6. #21 Python异常

    前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...

  7. Python异常和异常处理

    Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...

  8. python——异常except语句用法与引发异常

    except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...

  9. JAVA项目中常用的异常知识点总结

    JAVA项目中常用的异常知识点总结 1. java.lang.nullpointerexception这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用 ...

随机推荐

  1. 【JavaScript】20款漂亮的css字体

    样式一: body { margin: 0; padding: 0; line-height: 1.5em; font-family: "Times New Roman", Tim ...

  2. redis搭建集群并用TreeSoft管理

    前言:redis作为一款高效的NOSQL数据库已经深入贯彻和落实到我们的日常开发代码中,作为缓存.时间控制.数据仓库.队列等使用方法层出不穷,简直是开写代码.居家旅行之必备良药.曾经,我们的项目都是单 ...

  3. java之面向对象20160818

    本文主要是介绍一下java面向对象编程方面的知识,涉及的内容可能有点多,所以可能会感觉比较笼统,详细请参见<Java编程思想>里面比较具体点. 1.面向对象 和遵循设计原则和设计模式, 目 ...

  4. 简化版SMO算法标注

    ''' 随机选择随机数,不等于J ''' def selectJrand(i,m): j=i #we want to select any J not equal to i while (j==i): ...

  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) A 水 B stl C stl D 暴力 E 树状数组

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  6. vue添加属性绑定

    html <div id="app-2"> <span v-bind:title="message"> 鼠标悬停几秒钟查看此处动态绑定的 ...

  7. MySQL查询和修改auto_increment的方法

    查询表名为tableName的auto_increment值: 复制代码 代码如下: SELECT AUTO_INCREMENT FROM information_schema.tables WHER ...

  8. packet32 -- 打印packet32捕获的包

    void PrintPackets(LPPACKET lpPacket) { ULONG i, j, ulLines, ulen, ulBytesReceived; char *pChar, *pLi ...

  9. [转]hadoop2.x常用端口

    原文地址:http://www.zhixing123.cn/ubuntu/40649.html HDFS DataNode 50010 dfs.datanode.address datanode服务端 ...

  10. CSS3笔记-加强版

    属性选择器:   E[attr]只使用属性名,但没有确定任何属性值 E[attr="value"]指定属性名,并指定了该属性的属性值 E[attr~="value&quo ...