【问题标题】:KeyError handling while consuming API使用 API 时的 KeyError 处理
【发布时间】:2021-02-05 02:37:54
【问题描述】:

我正在使用 Yelp API 并使用此详细视图来显示各个餐厅的详细信息,例如餐厅的名称、评级和价格。详细字典在大多数情况下是可靠的,让我可以收集变量以用作模板中的上下文。然而,一些餐馆不向 API 提供他们的“价格”,因此在访问这个视图时我得到一个 KeyError,因为在某些情况下没有价格。如何使用 None 的价格创建此字典以避免此错误?还是使用 try & except 处理异常是最好的解决方案?

def detail(request, api_id):
    API_KEY = 'unique_key'
    url = 'https://api.yelp.com/v3/businesses/'+ api_id
    headers = {'Authorization': 'Bearer {}'.format(API_KEY)}

    req = requests.get(url, headers=headers)
    parsed = json.loads(req.text)

    detail = {
    'id': parsed['id'],
    'name': parsed['name'],
    'rating':parsed['rating'],
    'price': parsed['price'],
    }

    context = {'detail': detail}
    return render(request, 'API/detail.html', context)

【问题讨论】:

    标签: python django dictionary


    【解决方案1】:

    你可以使用<dict>.get('key', default_value):

    detail = {
        'id': parsed['id'],
        'name': parsed['name'],
        'rating':parsed['rating'],
        'price': parsed.get('price', None),  # <-- here
    }
    

    W3School 有一个很好的例子来说明如何使用.get() 方法。

    【讨论】:

      【解决方案2】:

      你可以试试:

          detail = {
          'id': parsed['id'],
          'name': parsed['name'],
          'rating':parsed['rating'],
          'price': parsed['price'] if parsed['price'] else None,
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 2011-07-02
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 2014-04-10
        • 2017-07-24
        相关资源
        最近更新 更多