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 异常知识点,布布扣,bubuko.com

时间: 2024-10-10 11:06:11

python 异常知识点的相关文章

python 类知识点总结

python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象中提取对象共同的特征和属性,构成一个类. 对象:具有数据属性和函数属性的集合体 实例化:由类生成一个对象的方法,就是实例化 实例:类的实例化就会产生一个实例(对象) 类: 对象就是类的抽象 类实例成对象的过程就是实例化 实例就是对象 2.面向对象的三大特性是什么? 继承,多态,封装 3.什么是方法?

十分钟的Python代码知识点总结

#-- 寻求帮助:dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串列表help(obj.func) # 查询obj.func的具体介绍和用法 #-- 测试类型的三种方法,推荐第三种if type(L) == type([]):print("L is list")if type(L) == list:print("L is list")if isinstance(L, list):print("L is list") #-

Python 九、Python异常

一.python异常 1.Python异常 python运行时发生错误称作异常 语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成.计算或者输出结果需要的过程无法执行等 Python异常是一个对象,表示错误或意外情况 在Python检测到一个错误时,将触发一个异常 Python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号 程序员也可以在代码中手动触发异常 Python异常也可以理解为:程序出现了错

Python异常

异常的概念: Python运行时的错误 语法错误:软件结构上错误而导致不能被解释器解释或不能被编译器编译 逻辑错误:由于不完整或不合法的输入导致,也可能是逻辑无法生成,计算或者输出结果需 要的过程无法执行等 Python的异常是一个对象,表示错误或者意外情况 在Python检测到一个错误时,将触发一个异常 Python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号 程序员也可以在代码中手动触发异常 Python的异常也可以理解为:程序出现了错误而在正常控制流之外采取行为 一.解

python Django知识点总结

python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创建表--python manage.py makemigrations --python manage.py migrate 其他命令: python manage.py runserver 0.0.0.0 python manage.py stratapp appname python manag

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

except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,<数据>:捕获指定异常及其附加的数据 except:<异常名1,异常名2>:<数据>:捕获异常名1或者异常名2,及附加的数据库 常用异常名: 异常名    描述 AttributeError 调用不存在的方法引发的异常 EOFError     遇到文件末尾引发的异常 Impor

python异常之ModuleNotFoundError: No module named &#39;test01inner02&#39;

当我们使用sys.path.append(args) 指令向程序中导入模块时其实本次append操作只是在内存中完成的,如果要永久性的添加需要修改环境变量. 我们发现当我们使用print(sys.path)后返回的是一个列表,其中包含当前文件所在项目的路径,还有python的默认加载库,添加只是暂时的. 错误调用: 目录结构: A.test0102.py文件 # coding = utf-8 def sing(): print("happay new year") B.init.py文

Python异常和文件读写

Python异常 1.python异常的完整语法 try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) # 使用 8 除以用户输入的整数并且输出 result = 8 / num print(result) except ValueError: print("请输入正确的整数!") except Exception as result: print("未知错误:%s" % result) else: prin

python重要知识点(不断更新)

Python简洁优雅,库丰富而强大,特别是在数据分析领域,有着重要的地位. 下面是我学习中总结的一些重要,容易忘记的知识点 一.Python是如何进行内存管理的? 先说明一点,Python每创建一个对象,这个对象都是一个三元组(标识,类型,值).当我们调用一个对象时一般是按引用传递, 有必要时才按值传递.(按引用不新建对象,按值则会新建对象) 1.引用计数机制 创建对象后,每分配一个名称或将对象放入一个容器时,该对象的引用计数都会增加: 每del一个名称或者引用超出作用域或者被重新赋值时,该对象