python3 中try 异常调试

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

python异常处理 - 图1

一、什么是异常?

当无法正确处理程序时就会出现异常。当异常发生时我们需要捕获处理它,否则程序会终止执行。

二、基础语法

捕捉异常可以使用try…..except语句。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

  1. try:
  2. 检测异常代码段
  3. except:
  4. 发生异常后执行代码段
  5. else:
  6. 未发生异常执行代码段
  7. finally:
  8. 最终执行代码段

三、基本原理

python异常处理 - 图2

四、具体示例

例子一:

  1. try:
  2. s = input("请输入内容:")
  3. if s is None:
  4. print ("s 是空对象")
  5. print(len(s)) #这句抛出异常
  6. except TypeError:
  7. print("类型错误,空对象没有长度")
  8. else:
  9. print("没有问题,正常执行!")
  10. finally:
  11. print('不管怎样,我都会执行')

python异常处理 - 图3

例子二:

当在try块中抛出一个异常,立即执行finally块代码。

  1. try:
  2. s = None
  3. if s is None:
  4. print ("s 是空对象")
  5. print(len(s)) #这句抛出异常
  6. except TypeError:
  7. print("类型错误,空对象没有长度")
  8. else:
  9. print("没有问题,正常执行!")
  10. finally:
  11. print('不管怎样,我都会执行')

python异常处理 - 图4

五、捕获异常的操作

1. 使用except而带多种异常类型

有多个expect的时候会首先执行第一个能被捕获到的异常并且只执行一个。

  1. try:
  2. 正常的操作
  3. except(Exception1[, Exception2[,...ExceptionN]]]):
  4. 发生以上多个异常中的一个,执行这块代码
  5. else:
  6. 如果没有异常执行这块代码

2.使用多层try的时候except的传递

多重异常的处理,可以在try语句中嵌套另一个try语句,一旦发生异常,python匹配最近的except语句。

若是内部except能够处理该异常,则外围try语句不会捕获异常。若是不能,或者忽略,外围try处理

内层异常捕获失败执行内层finally跳出外层执行异常捕获。

  1. try:
  2. try:
  3. x = 1
  4. y = 0
  5. z= x/y
  6. except NameError:
  7. print ("NameError")
  8. finally:
  9. print ("Finally inside")
  10. except :
  11. print ("All exception outside")
  12. finally:
  13. print ("Finally outside")

3. 自己抛出异常

触发异常时候,我们可以使用raise语句自己触发异常。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

  1. try:
  2. s = None
  3. if s is None:
  4. print ("s 是空对象")
  5. raise NameError #如果引发NameError异常,后面的代码将不能执行
  6. print(len(s)) #这句不会执行,但是后面的except还是会走到
  7. except TypeError:
  8. print("类型错误空对象没有长度")
  9. except NameError:
  10. print("接收到raise的异常NameError")
  11. finally:
  12. print('end test4')

4.抛出异常时候的参数附加显示

  1. print("test5")
  2. def myerror( level ):
  3. if level < 1:
  4. raise Exception(str(level) + " is Invalid level!")
  5. # 触发异常后,后面的代码就不会再执行
  6. try:
  7. myerror(0) # 触发异常
  8. except Exception as err:
  9. print(Exception)
  10. print(type(err))
  11. print(err)
  12. else:
  13. print("successfully")
  14. finally:
  15. print('end test5')

六、创建自己的异常

通过创建一个新的异常类,程序可以命名它们自己的异常。你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类。举个例子:

  1. #自定义异常
  2. class LengthRequiredException(Exception):
  3. def __init__(self,length,minLength):
  4. Exception.__init__(self)
  5. self.length = length
  6. self.minLength = minLength
  7. #引发自定义的异常
  8. l = [1,2,3,4,5]
  9. minLength = 6
  10. try:
  11. raise LengthRequiredException(len(l),minLength)
  12. except IndexError:
  13. print("index out of bounds")
  14. except LengthRequiredException as e:
  15. print("Length not fit :length is %d required %d" %(e.length,e.minLength))
  16. else:
  17. print("no exception was raised")
  18. finally:
  19. print("finally will be execute")

参考文章:

https://blog.csdn.net/qq_41554005/article/details/92246002