Python检测多列表是否含'FAIL'及PyQt5弹窗异常修复
问题原因分析
- 核心错误出在
checkResult_na的条件判断:当前写法中,or连接的列表(比如self.rxtxResult)只要非空就会被判定为True——哪怕列表里全是PASS,也会触发失败窗口,完全偏离了"检查是否存在FAIL"的逻辑。 - 附带问题:
checkbox_ledNA函数里的self.checkP1_na结果没有添加到LedResult列表,导致该检查项的结果永远不会被纳入最终判断。get_output_rx函数中,self.rxtxResult未初始化,且append和return语句被放在循环的不可达区域,结果根本不会被加入列表。
修正方案
1. 修复核心条件判断逻辑
修改checkResult_na函数,确保每个列表都检查是否包含FAIL,同时兼容列表未初始化的情况:
def checkResult_na(self): # 处理列表可能未定义的情况,默认转为空列表 ping_result = getattr(self, 'pingTestResult', []) rxtx_result = getattr(self, 'rxtxResult', []) led_result = getattr(self, 'LedResult', []) conf_result = getattr(self, 'confResult', []) # 逐个检查所有列表中是否存在FAIL has_fail = ('FAIL' in ping_result) or ('FAIL' in rxtx_result) or ('FAIL' in led_result) or ('FAIL' in conf_result) if has_fail: self.failWindow() else: self.passWindow()
2. 修复其他代码缺陷
- 补充
checkbox_ledNA中遗漏的列表添加操作:
def checkbox_ledNA(self): self.LedResult = [] self.LED_pass_na = 'PASS' self.LED_fail_na = 'FAIL' pass_fail_na = lambda state_na: self.LED_pass_na if state_na == 2 else self.LED_fail_na self.checkPWR_rot_na = pass_fail_na(self.ui.PWR_rot_NA.checkState()) self.LedResult.append(self.checkPWR_rot_na) self.checkPWR_grun_na = pass_fail_na(self.ui.PWR_grun_NA.checkState()) self.LedResult.append(self.checkPWR_grun_na) self.checkP1_na = pass_fail_na(self.ui.Port1_NA.checkState()) self.LedResult.append(self.checkP1_na) # 补充该行,将Port1的检查结果加入列表
- 修复
get_output_rx的逻辑错误,确保结果能正确存入列表:
def get_output_rx(self): # 初始化列表,避免未定义报错 if not hasattr(self, 'rxtxResult'): self.rxtxResult = [] self.size = self.ser.inWaiting() if self.size > 190: self.rx = 'PASS' print(self.size, ' RX-Leitung ', self.rx) else: self.rx = 'FAIL' print(' RX-Leitung ', self.rx) self.rxtxResult.append(self.rx) return self.rx
原代码中的while循环完全多余(第一次判断就会break),直接简化为单次判断即可。
内容的提问来源于stack exchange,提问作者Asram
相关产品推荐
相关产品推荐

