【问题标题】:Conditional assertion in PythonPython中的条件断言
【发布时间】:2019-07-22 11:05:32
【问题描述】:

我收到来自 WS 的响应,它返回列表的字典。一般来说,我需要检查字典中的列表是否为空。但是现在我需要根据情况检查其中的一些,但不是全部。

例如: 结果是:

{
    'firstList': [{...}], #some data in the list
    'secondList': [], #empty list
    'thirdList': [{...}], #some data in the list
    ...
}

例如,如果我有一个条件,则 secondList 不应该与

一起检查

assert len(response['secondList']) > 0

那么它不应该引发异常,但如果条件中没有它,那么它应该引发断言异常。

知道什么是这个问题的最佳解决方案吗?也许另一个断言库?

最好的办法是最后收集所有异常,然后我可以验证它们是否正常/正常。

【问题讨论】:

    标签: python assertion


    【解决方案1】:

    有几种方法,但比较干净的一种方法是:

    lists_to_check = ('firstList', 'thirdList')
    for list_name in lists_to_check:
        assert len(response[list_name]) > 0
    

    如果你想一一检查它们,你也可以使用类似的东西:

    assert condition1 or len(response['firstList']) > 0
    assert condition3 or len(response['thirdList']) > 0
    

    但无论如何我都会使用第一个。上面的sn-ps只检查'firstList''thirdList'的长度。

    【讨论】:

    • 如果您知道需要检查哪些元素,为什么要遍历整个字典?你能不能说:对于lists_to_check中的list_name:assert len(response[list_name]) > 0
    【解决方案2】:

    您可以将条件添加到assert

    assert condition or len(response['secondList']) > 0
    

    如果至少有一个条件是True,则断言将通过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2021-08-14
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多