python基础之内置异常对象
前言
什么叫异常?简单来说就是程序运行发生了预计结果之外的情况从而导致程序无法正常运行。而python解释器将一些常见的异常情况在它发生时打包成一个异常对象,我们可以通过捕捉这些异常对象从而进行处理,否则其会一层层冒泡,直到被处理或程序退出。
python内置异常类
内置异常类值指的是定义在builtins模块的异常类,内置的异常类有:
BaseException:所有异常的基类,包括退出异常和非退出异常;
SystemExit: 解释器请求退出
KeyboardInterrupt: 用户中断执行(通常是输入^C)
Exception: 常规错误的基类
StopIteration: 迭代器没有更多的值
GeneratorExit: 生成器(generator)发生异常来通知退出
ArithmeticError: 所有数值计算错误的基类
FloatingPointError: 浮点计算错误
OverflowError: 数值运算超出最大限制
ZeroDivisionError: 除(或取模)零 (所有数据类型)
AssertionError: 断言语句失败
AttributeError: 对象没有这个属性
EOFError: 没有内建输入,到达EOF标记
EnvironmentError: 操作系统错误的基类
IOError: 输入/输出操作失败
OSError: 操作系统错误
WindowsError: 系统调用失败
ImportError: 导入模块/对象失败
LookupError: 无效数据查询的基类
IndexError: 序列中没有此索引(index)
KeyError: 映射中没有这个键
MemoryError: 内存溢出错误(对于Python 解释器不是致命的)
NameError: 未声明/初始化对象 (没有属性)
UnboundLocalError: 访问未初始化的本地变量
ReferenceError: 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError: 一般的运行时错误
NotImplementedError: 尚未实现的方法
SyntaxError: Python语法错误
IndentationError: 缩进错误
TabError: Tab和空格混用
SystemError: 一般的解释器系统错误
TypeError: 对类型无效的操作
ValueError: 传入无效的参数
UnicodeError: Unicode相关的错误
UnicodeDecodeError: Unicode解码时的错误
UnicodeEncodeError: Unicode编码时错误
UnicodeTranslateError: Unicode转换时错误
Warning: 警告的基类
DeprecationWarning: 关于被弃用的特征的警告
FutureWarning: 关于构造将来语义会有改变的警告
OverflowWarning: 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning: 关于特性将会被废弃的警告
RuntimeWarning: 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning: 可疑的语法的警告
UserWarning: 用户代码生成的警告
异常捕捉方法
try:
pass
except ValueError as e:
pass
except Exception as e:
print(e.args)
pass
使用except关键字加异常类就可捕捉相应的异常,在异常发生时,解释器使用异常信息作为参数创建一个异常实例,然后按照从上往下的顺序判断异常的类型,如上例如果该异常属于ValueError类型则执行其下面的代码,如果不是则继续往下判断。
常用的异常类
- BaseException和Exception
BaseException是所有异常的基类,但显然作为开发者只需要捕捉非退出异常就行了,因此普通的异常都是继承了Exception,Exception是python中所有普通异常的基类。
try:
pass
except Exception as e:
do something
但是如果存在Exception的子类,会先尝试捕捉子类异常,没有才会进入Exception。
try:
pass
except SomeException as e: # 优先级高
do something
except Exception as e:
do something
- StopIteration:迭代器遍历完成的标志
这是手动遍历迭代器时捕捉异常使用。
iters = (i for i in range(10))
try:
while True:
c = next(iters)
print(c)
except StopIteration:
pass
- AssertionError
由关键字assert断言错误触发该异常。
assert 1 == 0
- AttributeError:
类如果没有某个属性触发该错误。
class Test(object):
pass
print(Test.name)
- TypeError
对类型无效的操作,比如说len(123)
查询异常
- LookupError:查询异常的基类
IndexError:索引异常
KeyError:查找键异常
数学计算异常
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
总结
写业务代码捕捉异常时尽量做到精细捕捉,而不要使用Exception直接捕捉;
如果发生异常可使用提前返回的方式而不要继续抛出异常;
python基础之内置异常对象的更多相关文章
- Python基础之内置函数(二)
先上一张图,python中内置函数: python官方解释在这:点我点我 继续聊内置函数: callable(object):检查对象是否可被调用,或是否可执行,结果为bool值 def f1(): ...
- python基础之内置装饰器
装饰器 简介 功能与格式 内置装饰器 @classmethod @propertry @staticmethod 其它 ---------------------------------------- ...
- Python基础之内置函数和递归
一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的 ...
- python基础之内置函数补充、匿名函数、递归函数
内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...
- python基础之内置函数
该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...
- python基础之内置函数和匿名函数
内置函数 学习函数以后多了很多概念,例如函数的命名空间,函数的作用域,函数的调用等等,函数的作用就是为了实现某些功能而方便以后可以调用,内置函数就是这样的一些公共的函数,被称为内置函数. 我们就一 ...
- Python基础之内置方法
目录 字符串的内置方法 按索引取值 切片(顾头不顾尾,步长) 长度len 成员运算 移除两边空白strip 切分split 循环 lower&upper startswith & en ...
- python基础之内置函数(一)
内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...
- python基础——内置函数
python基础--内置函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...
随机推荐
- Java对象空间分配流程
对象空间分配流程如下: 针对这个流程,分别解释一下每一个选项的使用场景. 栈上分配: 栈上分配的基础在于逃逸分析,逃逸分析可以得到三种对象的逃逸状态. 全局逃逸:一个对象的引用逃出了方法或者线程. ...
- 第131天:移动web页面的排版与布局
一.总之一句话, 尽量用mm 毫米作为标准单位. 采用新的相对单位 rem 首先设置html的 font-size 为根大小. html{ font-size:1mm; } .titleheight{ ...
- solr4.2增量索引之同步(修改,删除,新增)--转载
原文地址:http://www.jiancool.com/article/12743229775/;jsessionid=14E9B3F1BB33399799884B5C8F15DDE1 solr增 ...
- Qt——数据的隐式共享
一.隐式共享类 在Qt中有很多隐式共享类( Implicitly Shared Classes ),什么是隐式共享呢,请参考官方文档的说明. 好吧,翻译一下—— 许多C++类隐式地共享数据,使得资源使 ...
- redis的Pub/Sub功能
Pub/Sub功能(即Publish,Subscribe)意思是发布及订阅功能.简单的理解就像我们订阅blog一样,不同的是,这里的客户端与server端采用长连接建立推送机制,一个客户端发布消息,可 ...
- Git入门指南
git学习资源: Pro Git(中文版) Learn Git in your browser for free with Try Git. Git常用命令 Reference 常用 Git 命令清单 ...
- python自学笔记(二)
通过前文介绍,大体上可以用学过的知识做一些东西了. 这里简单介绍下python参数解析argparse命令. 使用argparse需要引用 import argparse 然后调用 parser = ...
- ACE服务端编程3:ACE跨平台之分配堆内存
ACE服务端编程系列的第三篇,探究ACE解决不同编译器之间分配堆内存的差异. 在ACE的官方示例中会看到大量的ACE_NEW_RETURN,ACE_NEW这样的宏,这是ACE为了消除不同编译器编译的代 ...
- centos 前端环境搭建
Node.js 安装 wget 下载安装 yum -y install gcc make gcc-c++ openssl-devel wget node v6.11.0 下载 wget https:/ ...
- tp查询中2个表格中字段,比较大小
$where['_string'] = '`has_number` < `number`';//~~~注意:这里`不能丢了: $coupon_flag = $coupon->where($ ...