Python异常
2015-12-09 14:04
501 查看
异常的处理
异常是指程序中的例外,违例情况;在Python3中,BaseException是所以异常的基类,所以的内置异常都是它的派生类;
Exception是除了SystemExit,GeneratorExit和KeyboardInterrupt之外的所有内置异常的基类,用户自定义的异常也要继承它;
Python内的异常使用继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获子类异常;
*StopItertion 当迭代器中没有数据项时触发,由内置函数next()和迭代器的__next__()方法触发
*ArithmeticError 算法异常基类,包括OverflowError(溢出异常),ZeroDivisionError(零除异常),FloatingPointError(失败的浮点数操作)
*AssertionError assert语句失败时触发
*AttributeError 属性引用和属性赋值异常
*BufferError 缓存异常,当一个缓存相关的操作不能进行时触发
*EOFError 未见末尾,使用内置函数input()生成,标识到达文件末尾。但是如read()和readline()等大多数I/O操作将返回一个空字符串来表示EOF而不是引发异常
*ImportError 导入异常,当import语句或者from语句无法在模块中找到相应文件名称时触发
*LookupError 当使用映射或者序列时,如果键值或者索引无法找到的时候触发——(KeyError和IndexError的基类)
*MemoryError 内存错误,当操作超出内存范围时触发
*NameError 名称异常,在局部或者全局空间中无法找到文件名称时触发
*OSError 当一个系统函数返回一个系统相关的错误时触发
*ReferenceError 引用异常,当底层的对象呗销毁后访问弱引用是触发
*RuntimeError 包含其他分类中没有被包括进去的一般错误
*SyntaxError 语法错误
*SystemError 编译器的内部错误
*TypeError 类型异常,当操作或者函数应用到不合适的类型时触发
*ValueError 值异常,当操作或者函数的类型正确,但是值不正确时触发
*Warning 警告
try...except
try...except语句用于处理问题语句,捕获可能出现的异常;try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常;
当异常出现时,python会自动生成1个异常对象,包含异常的具体信息;
如:
open("hello.txt","r") Traceback (most recent call last): File "C:\Users\cs\Desktop\hello.py", line 1, in <module> open("hello.txt","r") FileNotFoundError: [Errno 2] No such file or directory: 'hello.txt'
使用try...except语句:
try: open("hello.txt","r") #尝试读取一个不存在的文件,如果出现异常直接跳入except print("读文件") except FileNotFoundError: #捕捉FileNotFoundError异常 print("文件不存在") except: #其他异常情况 print("程序异常") 输出结果: 文件不存在
try: result = 10/0 except ZeroDivisionError: print("0不能被整除") else: print(result) #如果result表达式为10/2,则异常不会发生,else子句将被执行
异常嵌套:
try: s = "hello" try: print(s[0] + s[1]) print(s[0] - s[1]) except TypeError: print("字符串不支持减法运算") except: print("异常") 输出结果: he 字符串不支持减法运算如果外层try子句中的代码块引发异常,程序直接跳转到外层对应的except子句
try...except嵌套语句通常用于释放已经创建的系统资源
try...finally
无论异常是否发生,finally子句都会被执行;所有finally子句通常用于关闭因异常而不能释放的系统资源;
try中的变量是局部变量;
try: f = open("hello.txt","r") try: print(f.read(5)) except: print("读取文件错误") finally: print("释放资源") f.close() except FileNotFoundError: print("文件不存在") 输出结果: 文件不存在
使用raise抛出异常
raise可以显示引发异常,一旦执行了raise语句,raise后面的代码将不能被执行;raise语句通常用于抛出自定义异常,因其不再python的控制范围内,不会被python自动抛出
try: s = None if s is None: print("s是空对象") raise NameError print(len(s)) except TypeError: print("空对象没有长度") 输出结果: s是空对象 Traceback (most recent call last): File "C:\Users\cs\Desktop\hello.py", line 5, in <module> raise NameError NameError
自定义异常
Python运行程序媛自定义异常类型,用于描述Python异常体系中没有涉及的异常情况;自定义异常必须继承Exception类,按照命名规范以Error结尾,显示告诉程序媛该类是异常类;
自定义异常使用raise语句引发
from __future__ import division class DivisionException(Exception): def __init__(self,x,y): Exception.__init__(self,x,y) self.x = x self.y = y if __name__ == "__main__": try: x = 3 y = 2 if x%y > 0: print(x/y) raise DivisionException(x,y) #注释此行DivisionException异常不会触发 except DivisionException.div: #div表示DivisionException类的实例对象 print("DivisionException:x/y = %.2f"%(div.x/div.y)) 输出结果: 1.5 Traceback (most recent call last): File "C:\Users\cs\Desktop\hello.py", line 15, in <module> raise DivisionException(x,y) #注释此行DivisionException异常不会触发 DivisionException: (3, 2) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\cs\Desktop\hello.py", line 16, in <module> except DivisionException.div: #div表示DivisionException类的实例对象 AttributeError: type object 'DivisionException' has no attribute 'div'
assert语句
assert语句用于检测某个表达式是否为真;又称断言语言,即assert认为检测的表达式永远为真;
t = ("hello",) assert len(t) >= 1 t = ("hello") assert len(t) ==1 输出结果: Traceback (most recent call last): File "C:\Users\cs\Desktop\hello.py", line 4, in <module> assert len(t) ==1 AssertionError
相关文章推荐
- python类的继承与多态
- Python:一句话的优雅
- python基础教程共60课-第12课for循环
- Python 程序员经常犯的 10 个错误
- python 学习笔记二之sklearn 库
- python-property、docstring--笔记
- 使用Python实现简单购物车
- 淘宝评论爬取 python pandas
- Python之SQLAlchemy学习--外键约束问题
- unbtun python tab补全
- Python基础教程
- Python之SQLAlchemy学习
- python之路:进阶篇 内置函数
- python之路:进阶 二
- windows下安装python及django的开发环境
- Python回调函数用法实例详解
- Python定时任务
- Python杂项
- python anaconda 安装包
- python 装饰器