【问题标题】:Python Except Specific Key ErrorPython 除了特定的键错误
【发布时间】:2018-07-30 03:49:23
【问题描述】:

我正在使用 Beautiful Soup 解析一个 XML 文件。有时我的条目缺少我正在解析的一个或多个键。我想设置异常来处理这个。我的代码如下所示:

for entry in soup.findAll('entry_name'):
    try:
        entry_dict = dict(entry.attrs)
        x = entry_dict["x"]
        y = entry_dict["y"]
        z = entry_dict["z"]

        d[x] = [y, z]
    except KeyError: 
        y = "0"
        d[x] = [y, z]

问题是我可能会丢失“y”、“z”或同时丢失“y 和 z”,具体取决于条目。有没有办法处理特定的 KeyErrors?像这样的:

except KeyError "y":
except KeyError "z":
except KeyError "y","z":

【问题讨论】:

  • 在尝试获取信息之前,您不能使用.keys() 查看所有密钥吗?

标签: python xml exception-handling beautifulsoup keyerror


【解决方案1】:

您可以检查异常参数:

a = {}
try:
    a['a']
except KeyError as e:
    # handle key errors you want
    if e.args[0] == 'a':
        pass
    # reraise the exception if not handled
    else:
        raise

【讨论】:

    【解决方案2】:

    我个人不会在这里使用 try/except 而是使用检测方法而不是处理方法。

    if not 'y'  in entry_dict.keys() and not 'z' in entry_dict.keys():
      # handle y and z missing
    elif not 'y' in entry_dict.keys():
      # handle missing y
    elif not 'z' in entry_dict.keys():
      # handle missing z
    

    【讨论】:

      【解决方案3】:

      Paweł Kordowski 答案略有不同:

      a = {}
      try:
          a['a']
      except KeyError as e:
          # 2 other ways to check what the missing key was
          if 'a' in e.args:
              pass
          if 'a' in e:
              pass
          # reraise the exception if not handled
          else:
              raise
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2021-03-15
        相关资源
        最近更新 更多