我正在尝试针对一组非常具体的规则检查某个列表。 在这个特定的例子中,我有一个退出代码列表,我想检查测试是否失败。如果其中一个退出代码不是0,则测试失败。
我目前的实施:
for exit_code in result_list:
if exit_code is not 0:
raise TestFailed
问题:是否可以将前两行填入一行?这样做是否可取?
答案 0 :(得分:5)
您可以使用any
:
if any(exit_code != 0 for exit_code in result_list):
raise TestFailed
请注意,上述方法假设您还要检查等同于布尔False
的值(例如None
或False
!)。如果您确定result_list
仅包含数字,则可以将其缩短一点:
if any(result_list):
raise TestFailed
答案 1 :(得分:4)
你也可以像这样使用any
或all
:
>>> any(exit_code !=0 for exit_code in result_list)
True
>>> all(exit_code==0 for exit_code in result_list)
False
因为1是True,而python中的0是假的。
any(result_list)
将尝试查找任何非0(真)