前言

什么叫异常?简单来说就是程序运行发生了预计结果之外的情况从而导致程序无法正常运行。而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 除(或取模)零 (所有数据类型)

总结

  1. 写业务代码捕捉异常时尽量做到精细捕捉,而不要使用Exception直接捕捉;

  2. 如果发生异常可使用提前返回的方式而不要继续抛出异常;

python基础之内置异常对象的更多相关文章

  1. Python基础之内置函数(二)

    先上一张图,python中内置函数: python官方解释在这:点我点我 继续聊内置函数: callable(object):检查对象是否可被调用,或是否可执行,结果为bool值 def f1(): ...

  2. python基础之内置装饰器

    装饰器 简介 功能与格式 内置装饰器 @classmethod @propertry @staticmethod 其它 ---------------------------------------- ...

  3. Python基础之内置函数和递归

    一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的 ...

  4. python基础之内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...

  5. python基础之内置函数

    该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...

  6. python基础之内置函数和匿名函数

      内置函数 学习函数以后多了很多概念,例如函数的命名空间,函数的作用域,函数的调用等等,函数的作用就是为了实现某些功能而方便以后可以调用,内置函数就是这样的一些公共的函数,被称为内置函数. 我们就一 ...

  7. Python基础之内置方法

    目录 字符串的内置方法 按索引取值 切片(顾头不顾尾,步长) 长度len 成员运算 移除两边空白strip 切分split 循环 lower&upper startswith & en ...

  8. python基础之内置函数(一)

    内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...

  9. python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

随机推荐

  1. web端调百度地图页面

    在点击进入地图的入口(下面数据是vue渲染的数据) <a class="navigation" v-if="merchant.longitude && ...

  2. 元素定位:selenium消息框处理 (alert、confirm、prompt)

    基础普及 alert对话框 .细分三种,Alert,prompt,confirm 1. alert() 弹出个提示框 (确定) 警告消息框 alert 方法有一个参数,即希望对用户显示的文本字符串.该 ...

  3. (转)修改Android 的framework层后,重新编译

    1.下面方法适合真机:下载android源码,然后编译你修改的framwork的代码,会生成framework.jar,然后push到system/framework目录下,重启机器!ok 2,下面方 ...

  4. 【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)

    [BZOJ1001]狼抓兔子(平面图转对偶图,最短路) 题面 BZOJ 洛谷 题解 这题用最小割可以直接做 今天再学习了一下平面图转对偶图的做法 大致的思路如下: 1.将源点到汇点中再补一条不与任何线 ...

  5. Linux内核设计与实现第六周读书笔记

    第三章 进程管理 3.1 进程 进程是处于执行期的代码.通常进程还要包含其他资源,像打开的文件.挂起的信号.内核的内部数据.处理器状态.一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还 ...

  6. 解题:USACO06DEC Milk Patterns

    题面 初见SA 用了一个常见的按$height$分组的操作:二分答案,然后按$height$分组,遇到一个$height$小于$mid$的就丢进下一组并更新答案,如果最多的那组不少于$k$个说明可行 ...

  7. python基础----数据类型二

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  8. form, table表示表格的时候有什么区别?

    http://zhidao.baidu.com/link?url=1DFrMJlzV_fHSyGmKEi77ki6g2IrjrMfRGwVYNHL5Y8iJC9Diu2BoMGEiB3wbnkTCHm ...

  9. atom插件安装引发的nodejs和npm安装血案

    最近在写前端网页,学习就要从高大上的地方开始,于是我打算装一个atom编辑器. 本来就是由github客户端的,再装个atom也算是配套了吧,其实本白也是蛮费心思的,技术不怎么地,什么神器都再努力地使 ...

  10. Centos 7.3 下 的QT 输入中文

    我的QT 目录在 /opt/Qt/Tools/QtCreator,进入到 /bin 目录,然后运行 ./qtcreator.sh  就可以运行 在qtcreator.sh 中加入 export QT_ ...