• Python异常处理


    1. 常见异常
      AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
      IOError 输入/输出异常;基本上是无法打开文件
      ImportError 无法引入模块或包;基本上是路径问题或名称错误
      IndentationError 语法错误(的子类) ;代码没有正确对齐
      IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
      KeyError 试图访问字典里不存在的键
      KeyboardInterrupt Ctrl+C被按下
      NameError 使用一个还未被赋予对象的变量
      SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
      TypeError 传入对象类型与要求的不符合
      UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
      导致你以为正在访问它
      ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    2. 异常的分类:
    • 基本结构:
      try:
           被检测的代码块
      except 异常类型:
           try中一旦检测到异常,就执行这个位置的逻辑
    • 单分支结构:
      #单分支只能用来处理指定的异常情况,如果未捕获到异常,则报错
      try:
          a
      except NameError as e:  #我们可以使用except与as+变量名 搭配使用,打印变量名会直接输出报错信息
          print(e)   #name 'a' is not defined
    • 多分支结构·:
      l1 = [('电脑',16998),('鼠标',59),('手机',8998)]
      while 1:
          for key,value in enumerate(l1,1):
              print(key,value[0])
          try:
              num = input('>>>')
              price = l1[int(num)-1][1]
          except ValueError:
              print('请输入一个数字')
          except IndexError:
              print('请输入一个有效数字')
      #这样通过异常处理可以使得代码更人性化,用户体验感更好。
    • 万能异常处理类:
      在python的异常中,有一个万能异常:Exception,他可以捕获任意异常。它是一把双刃剑,有利有弊,我们要视情况使用
      
        如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么只有一个Exception就足够了。
      
        如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。我们可以使用多分支+万能异常来处理异常。使用多分支优先处理一些能预料到的错误类型,一些预料不到的错误类型应该被最终的万能异常捕获。需要注意的是,万能异常一定要放在最后,否则就没有意义了。
      
      part5:try...else语句
    • try else语句:
      try:
          for i in range(10):
              int(i)
      except IndexError as e:
          print(e)
      else:
          print('***********')   #***********   执行了此处
          #当try语句中的代码没有异常,被完整地执行完,就执行else中的代码
    • try finally 语句:
      def dealwith_file():
          try:
              f = open('file',encoding='utf-8')
              for line in f:
                  int(line)
              return True
          except Exception as e:
              print(e)
              return False
          finally:
              '''不管try语句中的代码是否报错,都会执行finally分支中的代码'''
              '''去完成一些连接操作的收尾工作'''
              print('finally 被执行了')
              f.close()
      ret = dealwith_file()
      print(ret)
    • 还可以自定义默认异常处理类
  • 相关阅读:
    SSIS: 使用Lookup 和 Cache transformation 进行数据匹配简单介绍
    Linux(Debain)环境安装WordPress
    [转]Ubuntu 软件安装、查找、卸载--apt-get、apt-cache命令安全
    SSIS 实例 从Ftp获取多个文件并对数据库进行增量更新。
    SSIS DB目录设置 (Integration Services Catalogs)
    SSIS:捕获修改了的数据
    MSSQL:修改tempdb设置增加DW性能
    Mac下安装sbt
    [转] linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
    [转] Spark-Sql On YARN自动调整Executor数配置
  • 原文地址:https://www.cnblogs.com/ybl20000418/p/11496632.html
Copyright © 2020-2023  润新知