内联尝试除外

时间:2017-01-16 11:03:21

标签: python try-except

我有一个JSON,其中有多个{},除了一个之外,都有'admissionCountTotal'个元素。没有这个元素的人可以是任何人,但是为了这个例子,让我们说我们知道它是哪一个。

{
    "movie":{
        "boxOffice":[
            {"admissionCountTotal":123},
            {"admissionCountTotal":456},
            {"admissionCountTotal":1234},
            {"admissionCountTotal":1253},
            {"admissionCount":"this is not admissionCountTotal"},
            {"admissionCountTotal":61723},
            {"admissionCountTotal":1423},
            {"admissionCountTotal":12323},
            {"admissionCountTotal":5123}
        ]
    }
}

我想检索可以在这些admissionCountTotal中找到的最大值。这是有效的,所以我基本上找到了如何做到这一点:

max(data['movie']['boxOffice'][sem]['admissionCountTotal'] for sem in xrange(0,3))

然而,这不是:

max(data['movie']['boxOffice'][sem]['admissionCountTotal'] for sem in xrange(0,56))

有两个原因:

  • 尝试获取data['movie']['boxOffice'][4]['admissionCountTotal']会出错。
  • 尝试获取data['movie']['boxOffice'][9]['admissionCountTotal']并且大于9会产生错误,因为上面没有任何元素。但是,我不知道有多少元素(除了不能超过56个元素的事实)

因此,我希望有某种内联try结构,我怀疑它可以解决我的问题。可能吗 ?如果没有,我还能如何解决我的问题?

1 个答案:

答案 0 :(得分:4)

我认为你根本不需要尝试;你只需要通过boxoffice的元素循环而不是整数范围。

max(item['admissionCountTotal'] for item in data['movie']['boxOffice'])

由于这些项目中至少有一项实际上没有总数,因此您可以使用get默认值:

max(item.get('admissionCountTotal', 0) for item in data['movie']['boxOffice'])