Python FairDetect类错误处理失效,输入错误值触发KeyError求助
FairDetect类异常处理失效及KeyError问题排查修复
问题根源
自定义异常提示不触发
input()函数无论输入什么内容,都会返回字符串类型,永远不会抛出ValueError,所以你写的except ValueError分支根本不会执行,自然看不到自定义错误提示。后续KeyError的原因
你输入的错误值在后续identify_bias方法中被当作字典键使用,但该键不存在于目标字典(比如你定义的labels)中,触发了Python默认的KeyError。
修复方案
1. 重写输入校验逻辑
把被动捕获异常改成主动校验输入是否符合要求,示例如下:
class FairDetect(): def __init__(self, model,X_test,y_test): self.model = model self.X_test = X_test self.y_test = y_test def create_labels(self, allowed_values=None): sensitive_label = {} # 把敏感列名作为参数传入,避免依赖全局变量 for group_id in set(self.X_test['group']): while True: label_input = input(f"Please Enter Label for Group {group_id}: ").strip() # 校验输入是否在允许范围内 if allowed_values and label_input not in allowed_values: print(f"Invalid value! Allowed labels: {allowed_values}") continue # 如果需要输入数字类型,可添加转换校验 # try: # label_input = int(label_input) # if label_input not in allowed_values: # raise ValueError # except ValueError: # print(f"Invalid value! Allowed values: {allowed_values}") # continue sensitive_label[group_id] = label_input break return sensitive_label
2. 消除全局变量依赖
原代码中create_labels直接依赖全局的sensitive变量,改成参数传入更规范,也能避免意外bug。
3. 前置校验避免后续KeyError
在create_labels阶段就限制输入必须符合identify_bias的要求,比如传入允许的标签列表,这样错误在输入时就被拦截,不会留到后续触发KeyError。
调用示例
sensitive_col = 'group' allowed_labels = {'GROUP A', 'GROUP B'} # 可根据需求替换为允许的标签集合 fd = FairDetect(model, X_test, y_test) # 传入允许的标签集合,提前校验输入 sensitive_labels = fd.create_labels(allowed_labels) fd.identify_bias(sensitive_col, sensitive_labels)
内容的提问来源于stack exchange,提问作者user19612347
相关产品推荐
相关产品推荐

