Python动态调用数据清洗函数报错问题求助
解决字符串不可调用的函数调用问题
你报错的核心原因是:拼接出来的fn_call是字符串,不是真正的函数对象,自然没法像函数一样调用。下面给两种靠谱的实现方式:
推荐方案:用字典映射函数(安全易维护)
把所有清洗函数和对应的字段名做一个映射字典,遍历的时候直接通过字段名找到对应函数,逻辑清晰还不容易出错:
# 定义你的清洗函数 def clean_field_1(field_value): # 这里写实际清洗逻辑,比如处理空值、格式化内容 return field_value.strip() if isinstance(field_value, str) else field_value def clean_field_2(field_value): # 示例:把字段转为浮点型,失败返回默认值0.0 try: return float(field_value) except (ValueError, TypeError): return 0.0 # 建立字段名到清洗函数的映射 clean_mapping = { "field_1": clean_field_1, "field_2": clean_field_2 } # 遍历字典处理字段 for field_name, field_value in dict_object.items(): # 检查当前字段是否有对应的清洗函数 if field_name in clean_mapping: cleaned_val = clean_mapping[field_name](field_value) # 把清洗后的值更新回原字典(或者存入新字典) dict_object[field_name] = cleaned_val
备选方案:通过全局命名空间获取函数(不推荐)
如果不想维护映射字典,可以通过globals()获取全局范围内的函数对象,但这种方式风险较高——如果有同名变量会被误认成函数,而且代码可读性差:
for field_name, field_value in dict_object.items(): func_name = f"clean_{field_name}" # 检查函数是否存在于全局命名空间 if func_name in globals(): clean_func = globals()[func_name] cleaned_val = clean_func(field_value) dict_object[field_name] = cleaned_val
优先用第一种方案,后续新增字段或修改清洗逻辑时,只需要更新映射字典和对应函数就行,代码维护起来更省心。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

