【问题标题】:Python: catch either one of two exceptions [duplicate]Python:捕获两个异常之一[重复]
【发布时间】:2019-01-13 19:38:22
【问题描述】:

我有以下代码。 article_as_dict 是我从外部来源收到的字典:

final_dict["short_title"] = article_as_dict["short_title"]
try:
    final_dict["picture_url"] = article_as_dict["main_image"]["img"][-1]["link"]
except IndexError:
    final_dict["picture_url"] = None

我最近发现我还需要考虑一个可能的KeyError,下面的块是最pythonic的方法吗?

final_dict["short_title"] = article_as_dict["short_title"]
try:
    final_dict["picture_url"] = article_as_dict["main_image"]["img"][-1]["link"]
except IndexError:
    final_dict["picture_url"] = None
except KeyError:
    final_dict["picture_url"] = None    

我不想要一个赤裸裸的except 子句,因为这是不好的做法。

【问题讨论】:

  • except (IndexError, KeyError):?我强烈建议在询问之前阅读basic tutorials
  • @jonrsharpe 这是either 的语法吗?

标签: python try-catch


【解决方案1】:

您可以在一行中捕获多个异常;

final_dict["short_title"] = article_as_dict["short_title"]
try:
    final_dict["picture_url"] = article_as_dict["main_image"]["img"][-1]["link"]
except (IndexError, KeyError) as e:
    final_dict["picture_url"] = None

【讨论】:

    【解决方案2】:

    您可以在一行中捕获多种类型的错误。

    来自Python Documentation

    一个except子句可以将多个异常命名为带括号的元组

    像这样捕捉你的错误会更pythonic:

    except (IndexError, KeyError)...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-28
      • 2012-07-13
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多