liangzhiwen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
相关概念

- 错误:程序运行之前的语法错误,如:关键字、缩进不齐、括号不成对。
- 异常:在程序运行过程中出现的问题,如:除数为0、对象属性不存在等。

异常处理

- 说明:异常处理可以理解为特殊的流程控制语句,可以提高代码的健壮性。
- 语法:
      try:
          print('正常代码')
          # 3/0
          # print(a)
          print('正常结束')
      except Exception as e:
          # 此处捕获异常,然后做出异常的处理
          print('出现了异常', e)
      
      print('over')
- 多个异常
      '''
      try:
          print('正常代码')
          # print(a)
          # 3/0
          d = {}
          print(d['age'])
      except NameError as e:
          print('NameError:', e)
      except ZeroDivisionError as e:
          print('ZeroDivisionError:', e)
      except Exception as e:
          print('Other:', e)
      '''
      
      try:
          # print(a)
          # 3/0
          d = {}
          print(d['age'])
      except (NameError, ZeroDivisionError) as e:
          # 将某些异常放在一起进行统一处理
          print(e)
      except:
          print('其他异常')
      
      print('OVER')
- 完整结构
      try:
          print('正常执行')
          print(a)
      except Exception as e:
          # 出现异常时执行
          print('出现异常:', e)
      else:
          # 没有异常时执行
          print('正常结束')
      finally:
          # 无论有无异常都会执行
          print('最后执行')
- 抛出异常
      try:
          print('正常执行')
          # 根据业务逻辑需要,手动抛出异常
          raise Exception('手动抛出的异常')
          print('正常结束')
      except Exception as e:
          print('异常', e)
      
      print('OVER')
- 异常嵌套
      print('我要去上班,什么事也阻止不了上班的脚步')
      
      try:
          print('我准备骑电车去上班')
          raise Exception('不知道昨天晚上哪个缺德的家伙把我充电器弄掉了')
          print('骑电车提前到达公司')
      except Exception as e:
          print('异常:', e)
          try:
              print('我准备做公交上班')
              raise Exception('等了20分钟一直没有公交,果断放弃')
              print('做公交准时到达')
          except Exception as e:
              print('异常', e)
              print('我准备打车')
              print('打车还是快,一会就到公司')
      print('热情满满的开始一天的工作')
- 自定义异常类
      # 自定义异常类
      class MyException(Exception):
          def __init__(self, msg):
              self.msg = msg
      
          def __str__(self):
              return self.msg
      
          # 异常处理函数
          def deal(self):
              print('特定的处理方案')
              
      try:
          print('正常执行')
        	raise MyException('自定义异常')
      except MyException as e:
          print(e)
        # 处理异常
        e.deal()
      # 这种异常放在最后
      except Exception as e:
         print('Exception', e)
      
      print('OVER')

- 特殊场景
  - 当进行文件操作时,无论过程中有误异常,最后一定要关闭文件。
  - 使用with语句,来保证文件的关闭,无论中间是否出现异常。
  - 示例:
      '''
        fp = open('00-text.txt', 'r')
        content = fp.read(1024)
        # ...
        # ...
        # 最后一定要关闭文件
        fp.close()
        '''
      
        with open('00-text.txt', 'r') as fp:
            content = fp.read(1024)
            # ...
            # ...
            # 不需要考虑文件的关闭问题,
            # 无论中间有无异常,都会确保文件的关闭

 

posted on 2018-09-10 10:59  liangzhiwen  阅读(107)  评论(0编辑  收藏  举报