错误和异常


有时即使 Python 程序的语法是正确的,在运行它的时候也有可能发生错误。运行期检测到的错误被称为异常。

当 Python 检测到一个错误时,程序就无法继续执行下去了,于是抛出相应的异常信息。


常见的异常:常见的异常


异常处理


为了让程序更健壮 (robust),称为鲁棒性或者冗棒性。

和容错性、可移植性、正确性有相似之处

  1. 容错性:一个软件可以从错误的输入推断出正确合理的输入

  2. 可移植性:一个软件可以正确地运行在不同环境下,则认为软件可移植性高

  3. 正确性:一个软件能够检测自己内部的设计或者编码错误,并得到正确的执行结果,这是软件的正确性标准,也可以说,软件有内部的保护机制


对抛出的异常进行处理:

1
2
3
4
try:
trySentence
except errorName:
ifErrorHappens

tips :

  1. 如果没有异常,except 子句在 try 语句执行之后被忽略

  2. 如果 try 子句中有异常发生,该部分的其他语句被忽略,直接跳到 except 部分,执行其后面指定的异常类型及其子句

  3. except 后面若没有任何异常类型参数,这样不论 try 发生什么异常,都会执行 except


分别处理多个异常:

1
2
3
4
5
6
try:
trySentence
except IOError:
ifIOErrorHappens
except ZeroDivisionError:
ifZeroDivisionErrorHappens


由同一个 except 处理多个异常:

1
2
3
4
try:
trySentence
except (IOError, ZeroDivisionError):
ifIOErrorOrZeroDivisionErrorHappens


经典句型,except Exception as e :

1
2
3
4
try:
trySentence
except Exception as e:
ifErrorHappens

tips :

  1. Exception 是所有异常的基类

  2. e 保存了异常信息


Assert 函数:用于判断一个表达式,当表达式结果为 false 的时候抛出异常。


else 子句:如果 try 语句里没有异常,执行 else 语句:

1
2
3
4
5
6
try:
trySentence
except errorName:
ifErrorHappens
else:
ifErrorNotHappens


finally 子句:不论有没有执行 except 语句,都会执行 finally 语句

1
2
3
4
5
6
try:
trySentence
except errorName:
ifErrorHappens
finally:
finallySentence