python:异常处理/相关概念/异常处理

    Python编程 wuya 26次浏览 已收录 0个评论

    相关概念

    • 错误:程序运行之前的语法问题。如:关键字、缩进不齐、符号不成对等
    • 异常:程序运行过程中出现的问题。如:除数为0、下标越界、访问不存在的属性等

    异常处理

    • 说明:
      • 异常处理就是在程序出现异常时进行人为的干预
      • 可以认为是一种特殊的流程控制语句
      • 提高代码的健壮性
    • 基本语法:
      try:
          print('正常执行')
          # a = 10 / 0
          print([1, 2, 3][3])
          print('运行结束')
      except Exception as e:
          # 在这里捕获异常,然后进行处理
          print('出现异常', e)
      
      print('OVER')
    • 多异常处理
      '''
      # 每种异常都有特定的不同的处理方式
      try:
          # print(a)
          # print(10 / 0)
          print([][3])
      except NameError as e:
          print('NameError', e)
      except ZeroDivisionError as e:
          print('ZeroDivisionError', e)
      except Exception as e:
          print('OtherError', e)
      '''
      
      # 多个异常有相同的处理方案,可以采用分组的方式
      try:
          # print(a)
          print(10/0)
      except (NameError, ZeroDivisionError) as e:
          # 分组处理异常
          print('NameError or ZeroDivisionError')
      except:
          # 当不需要异常信息时,可以不写异常类名及对象名称
          print('OtherError')
    • 完整异常处理
      try:
          print('正常执行')
          print(a)
      except Exception as e:
          # 出现对应异常时执行
          print('出现异常:', e)
      else:
          print('没有出现异常时执行')
      finally:
          print('无论有无异常都执行')
    • 手动抛出异常
      try:
          print('出现逻辑问题')
          # 创建一个异常对象,然后使用raise关键字抛出
          raise Exception('手动抛出的异常')
      except Exception as e:
          print('出现异常:', e)
      
      print('OVER')
    • 异常嵌套
      print('我要去上班,什么也阻止不了我上班的脚步')
      
      try:
          print('我准备骑车去上班')
          raise Exception('不指定哪个粗心的家伙把我充电器弄掉了')
          print('骑车提前到达公司')
      except Exception as e:
          print('电车故障:', e)
          try:
              print('于是准备坐公交去上班')
              raise Exception('等了15分钟一直没有公交')
              print('坐公交准时到达公司')
          except Exception as e:
              print('公交异常:', e)
              print('于是我准备打车去上班')
              print('打车还是快,提前到达公司')
      
      print('热情满满的开始一天的工作')
    • 自定义异常类
      import time
      
      # 自定义异常类
      class MyException(Exception):
          def __init__(self, msg):
              self.msg = msg
      
          def __str__(self):
              return self.msg
      
          # 异常处理函数
          def deal(self):
              print('异常处理中...')
              time.sleep(1)
              print('异常处理完毕')
              
      try:
          print('正常运行')
          raise MyException('请求参数有误')
      except MyException as e:
          # 一定要放在系统异常之前,否则将不会捕获异常
          print('自定义异常:', e)
          e.deal() 
      except Exception as e:
          # Exception是其他异常的父类,必须放在最后
          print('其他异常', e)
          print('处理其他异常') 
          
      print('OVER')    
    • 特定场景应用
      • 说明:特定场景指某个操作的环境,即上下文,如:文件上下文,最后一定要进行关闭操作。
      • with:针对有上下文的情况,可以使用with来确保操作结束时上下文的关闭操作。
      • 示例:
      '''
      # 在文件读写的上下文中,无论是否有异常,结束后都需要进行文件关闭操作
      fp = open()
      # 文件读写
      fp.close()
      '''
      
      '''
      with open('xx') as fp:
          pass
          # 这里就是文件操作的上写文
          # with语句结束时会自动执行关闭操作,不需要fp.close()
          # 也无论操作过程是否出现异常
      '''
      
      class Person:
          def __init__(self):
              print('__init__')
      
          # 进入上下文时执行
          def __enter__(self):
              print('__enter__')
      
          # 退出上下文时执行
          def __exit__(self, exc_type, exc_val, exc_tb):
              print('__exit__')
              print('异常类型', exc_type)
              print('异常信息', exc_val)
              print('异常追溯', exc_tb)
              
      with Person() as p:
          print('正常执行中')
          raise Exception('出现异常')   

    学海无涯 , 版权所有丨如未注明 , 均为原创丨转载请注明python:异常处理/相关概念/异常处理
    喜欢 (0)
    发表我的评论
    取消评论
    表情 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址