Pyt hon 提供了t ry except语句捕获并处理异常,该异常处理语句的基本语法结构如下:
try:
可能产⽣异常的代码块
except [(Error1, Error2, ...) [as e]]:
处理异常的代码块1
except [(Error3, Error4, ...) [as e]]:
处理异常的代码块2
  1. 该格式中,[] 括起来的部分可以使⽤,也可以省略;(Error1,Error2,...) 、(Error3,Error4,...) 表示各⾃的 except 块可以处理异常的具体类型;[as e] 表示将异常类型赋值给变量 e(⽅便在except 块中调⽤异常类型)。
  2. 注意,except 后⾯也可以不指定具体的异常名称,这样的话,表示要捕获所有类型的异常。
  3. 另外,从 try except 的基本语法格式可以看出,t ry 块仅有⼀个,但 except 代码块可以有多个,这是为了针对不同的异常类型提供不同的异常处理⽅式。当程序发⽣不同的意外情况时,会对应不同的异常类型,Pyt hon 解释器就会根据该异常类型来决定使⽤哪个except 块来处理该异常。
  4. 通过在try块后提供多个except 块可以⽆须在异常处理块中使⽤ if 判断异常类型,但依然可以针对不同的异常类型提供相应的处理逻辑,从⽽提供更细致、更有条理的异常处理逻辑。

try except 语句的执⾏流程如下:

  1. ⾸先执⾏ try 中的代码块,如果执⾏过程中出现异常,系统会⾃动⽣成⼀个异常对象,该异常对象会提交给 Pyt hon 解释器,此过程被称为引发异常。
  2. 当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为捕获异常。如果 Pyt hon 解释器找不到捕获异常的 except 块,则程序运⾏终⽌,Python 解释器也将退出。
    事实上,不管程序代码块是否处于 t ry 块中,甚⾄包括 except 块中的代码,只要执⾏该代码块时出现了异常,系统总会⾃动⽣成⼀个Error对象。如果程序没有为这段代码定义任何的except 块,则 Python 解释器⽆法找到处理该异常的 except 块,程序就会停⽌运⾏;反之,如果程序发⽣异常,并且该异常经 t ry 捕获并由 except 处理完成,则程序会继续执⾏。

举个例⼦:

try:
a = int (input ("输⼊被除数:"))
b = int (input ("输⼊除数:"))
c = a / b
print ("您输⼊的两个数相除的结果是:", c )
except (ValueError, Arit hmet icError):
print ("程序发⽣了数字格式异常、算术异常之⼀")
except :
print ("未知异常")
print ("程序继续运⾏")
程序运⾏结果为:
输⼊被除数:a
程序发⽣了数字格式异常、算术异常之⼀
程序继续运⾏
  • 上⾯程序中,第 6 ⾏代码使⽤了(ValueError, Arit hmet icError)来指定所捕获的异常类型,这就表明该 except 块可以同时捕获这 2 种类型的异常;第 8 ⾏代码只有 except 关键字,并未指定具体要捕获的异常类型,这种省略异常类的 except 语句也是合法的,它表示可捕获所有类型的异常,⼀般会作为异常捕获的最后⼀个 except 块。
  • 除此之外,由于try 块中引发了异常,并被 except 块成功捕获,因此程序才可以继续执⾏,才有了“程序继续运⾏”的输出结果。

访问异常信息

如果程序需要在 except 块中访问异常对象的相关信息,可以通过为 except 块添加as a来实现。当 Pyt hon 解释器决定调⽤某个 except 块来处理该异常对象时,会将异常对象赋值给except 块后的异常变量,程序即可通过该变量来获得异常对象的相关信息。

所有的异常对象都包含了如下⼏个常⽤属性和⽅法:

args:该属性返回异常的错误编号和描述字符串。
errno:该属性返回异常的错误编号。
st rerror:该属性返回异常的描述宇符串。
wit h_t raceback():通过该⽅法可处理异常的传播轨迹信息。

下⾯例⼦演示了程序如何访问异常信息:

def foo():
try:
fis = open("a.txt ");
except Except ion as e:
#访问异常的错误编号和详细信息
print (e.args)
#访问异常的错误编号
print (e.errno)
#访问异常的详细信息
print (e.strerror)
foo()

从上⾯程序可以看出,如果要访问异常对象,只要在单个异常类或异常类元组(多异常捕获)之后使⽤ as 再加上异常变量即可。
在 Pyt hon 的早期版本中,直接在单个异常类或异常类元组(多异常捕获)之后添加异常变量,中间⽤逗号隔开即可。上⾯程序调⽤了 Except ion 对象的 args 属性(该属性相当于同时返回 errno 属性和strerror属性)访问异常的错误编号和详细信息。运⾏上⾯程序,会看到如下运⾏结果:


(2, 'No such file or direct ory')
2
No such file or direct ory

从上⾯的运⾏结果可以看到,由于程序尝试打开的⽂件不存在,因此引发的异常错误编号为2,异常详细信息为:No such file or direct ory。



Raymond
1 声望1 粉丝

引用和评论

0 条评论