python学习笔记——异常处理
来源:互联网 发布:人工智能权威期刊 编辑:程序博客网 时间:2024/05/01 21:05
异常处理
try/多个except/else/finally语句
try代码块是此语句的主要动作,尝试执行的代码。except分句捕获且处理try代码块内引发的异常,else分句是try没有发生异常时要执行的处理器。finally语句不管异常是否发生都会去执行的,如果没有异常发生,执行完try代码块后执行finally语句,否则执行完异常处理之后跳去执行finally语句。
try: try-blockexcept Exception1: handler1except Exception2: handler2...except: handlerelse: else-blockfinally: finally-block# 一般常用形式try...except...finally # 注意:finally一但有异常发生,就会触发finally语句执行,小心谨慎使用。一般在最外层使用,用于程序异常结束关闭文件,数据库连接,套接字连接等。try: print 'outer try' try: print 'inner try' temp = 1 + [] # unsupported operand type(s) for +: 'int' and 'list' except TypeError as e: print e finally: print 'inner finally'finally: print 'outer finally'# 输出:'''outer tryinter tryunsupported operand type(s) for +: 'int' and 'list'inner finallyouter finally'''
- 如果try代码块执行时发生了异常,python会去执行第一个符合引发异常的except分句下面的处理代码。如果没有找到符合的except分句,异常就会传递到当前try语句外部,由外部的except处理。当except语句执行完后,假设except语句执行过程中无异常发生,控制权就会跳到try语句后继续执行。如果有finally语句自动触发执行。
- 如果try代码块执行无异常发生,python会去执行else分句代码块,执行完后控制权会跳到try语句后继续执行。
- 使用except可以捕获所有异常,如异常嵌套结构中高层try处理器所期待发生的异常错误,这类错误包括内存错误,循环迭代结束等。
- 利用sys.exc_info可以获取最近发生的异常的结果,以三元组的形式返回(type,value,traceback)。type是正在处理的异常的异常类型,value是异常参数,traceback是一个traceback对象,代表异常最初发生时所调用的堆栈。
- except常用形式
触发异常
有时候我们需要在自己实现的接口里抛出异常,这时候我们就要用到raise关键字了,后面跟着要引发的异常类名称,以及一个可选的额外数据项。异常不总是错误,但错误一定是异常。我们有时候需要在无法返回警示值的函数中主动抛出非错误异常。
class UndefineError(Exception): def __init__(self, data) self.data = data def __str__(self):# 重载 return "UndefineError: can't find the item."def get_item(): # 获取一个数据库条目 if success: # 成功找到,返回条目 return item else: # 查找失败,抛出自定义异常 raise UndefineError()# 最常用抛出异常方式 raise class_instance # raise UndefineError('data')
class_instance异常类名称需要预先定义好,否则会报未定义错误。
我们可以在抛出异常的时候携带数据信息,在try语句中,捕获这个数据是通过一个变量实现的except class_instance, e,数据就存放在e变量中。
assert可以有条件地在程序代码中触发异常,可以认为是有条件的raise。assert几乎都是用来检验用户定义的约束条件,一般是用于检查接口参数合法性,通常没有必要写assert去捕捉超出索引值,类型不匹配以及除数为0之类的事。
assert <conditon_test> <tip_data>def test(x): assert x > 0, 'x must great than zero.' return x * xtest(-1) # AssertionError: x must be great zerot
常见异常
0 0
- python学习笔记——异常处理
- Python 学习笔记 ——异常处理
- Python学习笔记(八)——Python 异常处理
- Python学习笔记(九)——异常处理
- Python学习笔记--异常处理
- Python学习笔记--异常处理
- Python学习笔记--异常处理
- Python学习笔记 异常处理
- Python异常处理学习笔记
- Python笔记——异常处理
- Python笔记——异常处理
- 「学习笔记——Python」Python 的错误和异常处理
- python学习——异常处理
- python(异常处理机制,学习笔记摘要)
- Python学习笔记(4)--异常处理
- python 学习笔记 6 -- 异常处理
- Python学习笔记 --- 异常处理心得
- python学习笔记8.1-异常处理
- C++ 无名对象
- 经典SQL语句大全
- UIImage
- 微信公众平台开发教程新手解惑40则
- Java关键字this、super使用总结
- python学习笔记——异常处理
- memorization DEMO
- ACE在Linux环境下的编译安装
- bzoj1001【BeiJing2006】狼抓兔子
- 冒泡排序算法笔记
- C++ 异常处理流程
- LeetCode(60) Permutation Sequence
- 为什么要重写hashcode() 方法
- zoj2405