简单介绍Python中异常处理用法

Python017

简单介绍Python中异常处理用法,第1张

为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,

1.if进行处理,在错误发生之前进行预防

如果错误发生的条件是可预知的,我们需要用if进行处理,在错误发生之前进行预防

2.用try..except:在错误发生之后进行处理

如果错误发生的条件是不可预知的,则需要用到try..except:在错误发生之后进行处理

到此这篇关于 Python中异常处理用法的文章就介绍到这了。

如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrl+c 退出,解释器就会产生一个 KeyboardInterrupt 异常。而 KeyError、ValueError、TypeError 等更是日常编程里随处可见的老朋友。

异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try ... except 包裹特定语句,妥当的完成错误流程处理。而恰当的使用 raise 主动“抛出”异常,更是优雅代码里必不可少的组成部分。

异常分类

BaseException 所有异常的基类

Exception 常见错误的基类

ArithmeticError 所有数值计算错误的基类

Warning 警告的基类

AssertError 断言语句(assert)失败

AttributeError 尝试访问未知的对象属性

DeprecattionWarning 关于被弃用的特征的警告

EOFError 用户输入文件末尾标志EOF(Ctrl+d)

FloattingPointError 浮点计算错误

FutureWarning 关于构造将来语义会有改变的警告

GeneratorExit generator.close()方法被调用的时候

ImportError 导入模块失败的时候

IndexError 索引超出序列的范围

KeyError 字典中查找一个不存在的关键字

KeyboardInterrupt 用户输入中断键(Ctrl+c)

MemoryError 内存溢出(可通过删除对象释放内存)

NamerError 尝试访问一个不存在的变量

NotImplementedError 尚未实现的方法

OSError 操作系统产生的异常(例如打开一个不存在的文件)

OverflowError 数值运算超出最大限制

OverflowWarning 旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning 关于特征会被遗弃的警告

ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象

RuntimeError 一般的运行时错误

RuntimeWarning 可疑的运行行为(runtime behavior)的警告

StopIteration 迭代器没有更多的值

SyntaxError Python的语法错误

SyntaxWarning 可疑的语法的警告

IndentationError 缩进错误

TabError Tab和空格混合使用

SystemError Python编译器系统错误

SystemExit Python编译器进程被关闭

TypeError 不同类型间的无效操作

UnboundLocalError 访问一个未初始化的本地变量(NameError的子类

UnicodeError Unicode相关的错误(ValueError的子类)

UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)

UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)

UserWarning 用户代码生成的警告

ValueError 传入无效的参数

ZeroDivisionError 除数为零

看下面的两个例子,它们的作用是完全一样的,非常简单,给除数和被除数,计算除法的结果。

这可能是世界上最没用的函数之一,但重点不在这里。重点在于下面的问题:

继续看之前,先考虑一下。给出自己的答案。

Python大师们一般会 「推荐第一种」 使用异常的写法。理由如下:

异常处理的代码是只有发生了异常才会去执行。既然绝大部分情况下不会发生异常,那就没必每次都做事前判断,这样会很浪费CPU的运算力。假设100次调用,只有1次有问题,却要做100次if判断,不浪费吗?

反过来使用异常的方法,只有 出现 了异常才去做处理,那么except语句只会执行一次。

通过这个对比,我们也可以看到:

试想一下,如果我们可以取消做飞机时候的各种事前检查,是不是可以大大提高效率呢?

现实生活中,我们不能取消这种检查。但在程序中,我们可以,因为我们可以用异常捕捉。

现在给大家推荐两条Python异常处理的哲学: