首页 > 代码库 > 异常处理

异常处理

异常

 

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

 

什么是异常处理?

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

为什么要进行异常处理?

python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。

所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 

如何进行异常处理?

首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

一: 使用if判断式

num1=input(>>: ) #输入一个字符串试试if num1.isdigit():    int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴elif num1.isspace():    print(输入的是空格,就执行我这里的逻辑)elif len(num1) == 0:    print(输入的是空,就执行我这里的逻辑)else:    print(其他情情况,执行我这里的逻辑)#第二段代码# num2=input(‘>>: ‘) #输入一个字符串试试# int(num2)#第三段代码# num3=input(‘>>: ‘) #输入一个字符串试试# int(num3)‘‘‘问题一:使用if的方式我们只为第一段代码加上了异常处理,针对第二段代码,你得重新写一堆if,elif等第三段,你还得在写一遍,当然了,你说,可以合在一起啊,没错,你合起来看看,你的代码还能被看懂吗???而这些if,跟你的代码逻辑并无关系,这就好比你在你心爱的程序中到处拉屎,拉到最后,谁都不爱看你的烂代码,为啥,因为可读性差,看不懂问题二:第一段代码和第二段代码实际上是同一种异常,都是ValueError,相同的错误按理说只处理一次就可以了,而用if,由于这二者if的条件不同,这只能逼着你重新写一个新的if来处理第二段代码的异常第三段也一样

 

 

二:python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

 

part1:基本语法

1 try:2     被检测的代码块3 except 异常类型:4     try中一旦检测到异常,就执行这个位置的逻辑

part2:异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

1 # 未捕获到异常,程序直接报错2  3 s1 = ‘hello‘4 try:5     int(s1)6 except IndexError as e:7     print e

part3:多分支

1 s1 = ‘hello‘2 try:3     int(s1)4 except IndexError as e:5     print(e)6 except KeyError as e:7     print(e)8 except ValueError as e:9     print(e)

part4:万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

1 s1 = ‘hello‘2 try:3     int(s1)4 except Exception as e:5     print(e)

 

也可以在多分支后来一个Exception

s1 = ‘hello‘try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)except Exception as e:    print(e)

s1 = ‘hello‘try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)except Exception as e:    print(e)

 

 

使用try..except的方式

1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

 

异常处理