python3 中try 异常调试
最近学习到了python如何处理异常,发现一篇比较好的文章,整理了一下,供大家学习研究。

一、什么是异常?
当无法正确处理程序时就会出现异常。当异常发生时我们需要捕获处理它,否则程序会终止执行。
二、基础语法
捕捉异常可以使用try…..except语句。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
try:检测异常代码段except:发生异常后执行代码段else:未发生异常执行代码段finally:最终执行代码段
三、基本原理

四、具体示例
例子一:
try:s = input("请输入内容:")if s is None:print ("s 是空对象")print(len(s)) #这句抛出异常except TypeError:print("类型错误,空对象没有长度")else:print("没有问题,正常执行!")finally:print('不管怎样,我都会执行')

例子二:
当在try块中抛出一个异常,立即执行finally块代码。
try:s = Noneif s is None:print ("s 是空对象")print(len(s)) #这句抛出异常except TypeError:print("类型错误,空对象没有长度")else:print("没有问题,正常执行!")finally:print('不管怎样,我都会执行')

五、捕获异常的操作
1. 使用except而带多种异常类型
有多个expect的时候会首先执行第一个能被捕获到的异常并且只执行一个。
try:正常的操作except(Exception1[, Exception2[,...ExceptionN]]]):发生以上多个异常中的一个,执行这块代码else:如果没有异常执行这块代码
2.使用多层try的时候except的传递
多重异常的处理,可以在try语句中嵌套另一个try语句,一旦发生异常,python匹配最近的except语句。
若是内部except能够处理该异常,则外围try语句不会捕获异常。若是不能,或者忽略,外围try处理
内层异常捕获失败执行内层finally跳出外层执行异常捕获。
try:try:x = 1y = 0z= x/yexcept NameError:print ("NameError")finally:print ("Finally inside")except :print ("All exception outside")finally:print ("Finally outside")
3. 自己抛出异常
触发异常时候,我们可以使用raise语句自己触发异常。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
try:s = Noneif s is None:print ("s 是空对象")raise NameError #如果引发NameError异常,后面的代码将不能执行print(len(s)) #这句不会执行,但是后面的except还是会走到except TypeError:print("类型错误空对象没有长度")except NameError:print("接收到raise的异常NameError")finally:print('end test4')
4.抛出异常时候的参数附加显示
print("test5")def myerror( level ):if level < 1:raise Exception(str(level) + " is Invalid level!")# 触发异常后,后面的代码就不会再执行try:myerror(0) # 触发异常except Exception as err:print(Exception)print(type(err))print(err)else:print("successfully")finally:print('end test5')
六、创建自己的异常
通过创建一个新的异常类,程序可以命名它们自己的异常。你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类。举个例子:
#自定义异常class LengthRequiredException(Exception):def __init__(self,length,minLength):Exception.__init__(self)self.length = lengthself.minLength = minLength#引发自定义的异常l = [1,2,3,4,5]minLength = 6try:raise LengthRequiredException(len(l),minLength)except IndexError:print("index out of bounds")except LengthRequiredException as e:print("Length not fit :length is %d required %d" %(e.length,e.minLength))else:print("no exception was raised")finally:print("finally will be execute")
