python内置异常类_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直接捕捉;

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值