Python中使用exec()传入DataFrame报错的解决方法咨询
解决exec()执行带DataFrame参数函数时的语法错误
你遇到的问题根源在于:用f-string拼接字典args时,字典中的DataFrame对象会被转换成它的打印字符串(多行表格格式),直接拼入exec执行的代码后,会破坏Python语法结构,导致SyntaxError。
比如你的args如果是{'df': pd.DataFrame({'col': [1,2]})},f"{args}"会输出类似{'df': col\n0 1\n1 2},拼到函数调用里就变成了非法的Python代码。
方案1:直接调用函数(推荐,避免exec)
完全不需要用exec,通过函数名字符串获取函数对象后,直接解包参数调用:
import pandas as pd # 示例函数与参数 def process_df(df, threshold): return df[df['col'] > threshold] func_name = "process_df" args = {'df': pd.DataFrame({'col': [1,2,3]}), 'threshold': 2} # 获取函数对象并执行调用 func = globals()[func_name] _exec_output = func(**args)
这种方式既安全又不会有语法问题,还避免了exec带来的潜在安全风险。
方案2:如果必须使用exec
不要把字典转成字符串拼入代码,而是将字典存入全局/局部命名空间,在exec代码中直接引用:
# 将args存入全局命名空间 globals()['args_dict'] = args # 执行exec时直接引用字典变量 exec(f"_exec_output = {func_name}(**args_dict)", globals()) # 执行完成后删除变量,避免污染命名空间 del globals()['args_dict']
这样exec执行的代码是合法的,因为它直接引用了命名空间中的字典对象,而非拼接错误的字符串格式。
内容的提问来源于stack exchange,提问作者Amina Tkhamokova
相关产品推荐
相关产品推荐

