异常处理的作用

程序遇到异常会退出,处理异常增加程序的健壮性

错误可预知

此时应该用if判断去预防异常

  1. AGE = 10
  2. age = input('>>: ').strip()
  3. if age.isdigit():
  4. age = int(age)
  5. if age > AGE:
  6. print('太大了')

错误不可预知

此时应该用异常处理机制,try…except

语法

  1. 异常在 try 块里抛。
  2. try有异常,执行 except try 无异常,才会执行 else
  3. finally:无论 try 块是否抛异常,永远执行的代码,通常用来执行关闭文件,断开服务器连接等功能。
  4. try 可与 else finally两者中的至少一个一起使用

万能异常

Exception,被监测的代码块抛出的异常有多种可能性
并且我们针对所有的异常类型都只用一种处理逻辑就可以了,那就使用Exception

  1. try:
  2. print('===>1')
  3. # name
  4. print('===>2')
  5. l = [1, 2, 3]
  6. l[100]
  7. print('===>3')
  8. d = {}
  9. d['name']
  10. print('===>4')
  11. except Exception as e:
  12. print('异常发生啦:', e)
  13. print('====>afer code')

多分支

使用场景:可以知道部分具体的异常类型
try…except

  1. try:
  2. print('===>1')
  3. # name
  4. print('===>2')
  5. l = [1, 2, 3]
  6. # l[100]
  7. print('===>3')
  8. d = {}
  9. d['name']
  10. print('===>4')
  11. except NameError as e:
  12. print('--->', e)
  13. except IndexError as e:
  14. print('--->', e)
  15. except KeyError as e:
  16. print('--->', e)
  17. except Exception as e:
  18. print('统一的处理方法')
  19. print('====>afer code')

try…except…else

  1. try:
  2. print('===>1')
  3. # name
  4. print('===>2')
  5. l=[1,2,3]
  6. # l[100]
  7. print('===>3')
  8. d={}
  9. d['name']
  10. print('===>4')
  11. except NameError as e:
  12. print('--->',e)
  13. except IndexError as e:
  14. print('--->',e)
  15. except KeyError as e:
  16. print('--->',e)
  17. except Exception as e:
  18. print('统一的处理方法')
  19. else:
  20. print('在被检测的代码块没有发生异常时执行')
  21. print('====>afer code')

try…except…finally

  1. try:
  2. print('===>1')
  3. # name
  4. print('===>2')
  5. l=[1,2,3]
  6. # l[100]
  7. print('===>3')
  8. d={}
  9. d['name']
  10. print('===>4')
  11. except NameError as e:
  12. print('--->',e)
  13. except IndexError as e:
  14. print('--->',e)
  15. except KeyError as e:
  16. print('--->',e)
  17. except Exception as e:
  18. print('统一的处理方法')
  19. finally:
  20. print('不管被检测的代码块有无发生异常都会执行')
  21. print('====>afer code')

try…except…else…finally

  1. try:
  2. print('===>1')
  3. # name
  4. print('===>2')
  5. l=[1,2,3]
  6. # l[100]
  7. print('===>3')
  8. d={}
  9. d['name']
  10. print('===>4')
  11. except NameError as e:
  12. print('--->',e)
  13. except IndexError as e:
  14. print('--->',e)
  15. except KeyError as e:
  16. print('--->',e)
  17. except Exception as e:
  18. print('统一的处理方法')
  19. else:
  20. print('在被检测的代码块没有发生异常时执行')
  21. finally:
  22. print('不管被检测的代码块有无发生异常都会执行')
  23. print('====>afer code')