使用推导式校验集合元素存在性时断言失败,求排查
问题分析与解决
你的推导式确实没实现预期功能,核心问题是逻辑判断方向搞反了:
当前代码里的pass1_task in (task for task in all_downstream_task_for_dl_task),本质是判断**pass1_task是否完全等于集合中的某个元素**,但你实际需要的是判断集合中的某个元素是否包含pass1_task。
你的集合元素'first_cpp_pass.euronext3-equities_nl_A_3'和'first_cpp_pass'不是完全相等的,所以当前断言会失败。
修正后的代码
你需要把判断逻辑调整为检查目标字符串是否是集合元素的子串,以下两种写法都可以:
写法一:保持原有遍历顺序
assert any(pass1_task in task for task in all_downstream_task_for_dl_task for pass1_task in {'first_pass', 'first_cpp_pass'}), 'the test failed unexpectedly'
写法二:更直观的嵌套判断
target_passes = {'first_pass', 'first_cpp_pass'} assert any(any(target in task for target in target_passes) for task in all_downstream_task_for_dl_task), 'the test failed unexpectedly'
这两种写法都会检查:只要all_downstream_task_for_dl_task中有任意一个元素包含'first_pass'或'first_cpp_pass'中的任意一个,断言就会通过,完全符合你的预期。
内容的提问来源于stack exchange,提问作者user21641220
相关产品推荐
相关产品推荐

