异常处理

异常介绍

  1. 1、什么是异常
  2. 异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止
  3. print('start....')
  4. [1,2,3][1000]
  5. print('stop...')
  6. 1.1 异常处理的三个特征
  7. 异常的追踪信息
  8. 异常的类型
  9. 异常的内容
  10. 2、为何处理异常
  11. 为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序
  12. 而是捕捉异常并处理:将出错信息记录到日志内
  13. 3、如何处理异常?
  14. 3.1 语法上的错误SyntaxError,
  15. 处理方式一:必须在程序运行前就改正
  16. if 1>3
  17. print("run...")

逻辑异常处理

  1. 3.2 逻辑上的错误
  2. print(x)
  3. l=['a','b']
  4. l[2]
  5. 1/0
  6. int('abc')
  7. dic={'name':'egon'}
  8. dic['age']
  9. class Foo:
  10. pass
  11. Foo.x
  12. 3.2 针对逻辑上的异常又分成两种处理方式
  13. 3.2.1 错误发生的条件是可以预知的,使用if判断来解决
  14. age=input('>>: ').strip() # 输入的只要不是数字就会出错
  15. if age.isdigit():
  16. age=int(age)
  17. if age > 18:
  18. print('猜大了')
  19. elif age < 18:
  20. print('猜大了')
  21. else:
  22. print('猜对了')
  23. else:
  24. print('必须输入数字')

错误发生的条件无法预知

  1. 3.2.2 错误发生的条件是无法预知的
  2. print('start...')
  3. try:
  4. # 有可能会抛出异常的代码
  5. 子代码1
  6. 子代码2
  7. 子代码3
  8. except 异常类型1 as e:
  9. pass
  10. except 异常类型2 as e:
  11. pass
  12. ...
  13. else:
  14. 如果被检测的子代码块没有异常发生,则会执行else的子代码
  15. finally:
  16. 无论被检测的子代码块有无异常发生,都会执行finally的子代码
  17. print('end...')

用法

  1. # 用法一:
  2. print('start...')
  3. try:
  4. print('1111111111')
  5. l=['aaa','bbbb']
  6. l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
  7. print('2222222222')
  8. xxx
  9. print('33333333')
  10. dic={'a':1}
  11. dic['a']
  12. except IndexError as e:
  13. print('异常的信息: ',e)
  14. print('end....')
  15. # 用法二:
  16. print('start...')
  17. try:
  18. print('1111111111')
  19. l=['aaa','bbbb']
  20. # l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
  21. print('2222222222')
  22. xxx
  23. print('33333333')
  24. dic={'a':1}
  25. dic['a']
  26. except IndexError as e:
  27. print('异常的信息: ',e)
  28. except NameError as e:
  29. print('异常的信息: ',e)
  30. print('end....')
  31. # 用法三:
  32. print('start...')
  33. try:
  34. print('1111111111')
  35. l = ['aaa', 'bbbb']
  36. l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
  37. print('2222222222')
  38. xxx
  39. print('33333333')
  40. dic = {'a': 1}
  41. dic['aaa']
  42. # except (IndexError, NameError) as e:
  43. # print('异常的信息: ', e)
  44. # except KeyError as e:
  45. # print('字典的key不存在: ', e)
  46. except Exception as e: # 万能异常
  47. print('所有异常都可以匹配的到')
  48. print('end....')
  49. # 用法四:else不能单独与try配合使用,必须要搭配except
  50. print('start...')
  51. try:
  52. print('1111111111')
  53. print('2222222222')
  54. print('33333333')
  55. except Exception as e: # 万能异常
  56. print('所有异常都可以匹配的到')
  57. else:
  58. print('====>')
  59. print('end....')
  60. # 用法五:finally可以单独与try配合使用
  61. print('start...')
  62. try:
  63. print('1111111111')
  64. l = ['aaa', 'bbbb']
  65. l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
  66. print('2222222222')
  67. xxx
  68. print('33333333')
  69. dic = {'a': 1}
  70. dic['aaa']
  71. finally: # 不处理异常,无论是否发生异常都会执行finally的子代码
  72. print('====》》》》》应该把被检测代码中回收系统资源的代码放到这里')
  73. print('end....')