从文件读取规则动态生成查询遇报错,寻求技术解决方案
动态生成查询语句报错的解决思路
你的代码报错是因为eval执行时,把AC当成了变量名而非字符串。最终生成的表达式是AC.startswith(AC),但AC并不是你定义过的变量,因此会抛出NameError。
以下是两种解决思路:
方法一:给字符串参数添加引号
修改格式化字符串,给a和rule加上单引号,确保eval将其识别为字符串:a = "AC" cond = "startswith" rule = "AC" eval("'%s'.%s('%s')" %(a, cond, rule))方法二:用
getattr替代eval(更安全)eval存在代码注入的安全风险,推荐使用getattr直接调用字符串方法,无需拼接表达式字符串:a = "AC" cond = "startswith" rule = "AC" getattr(a, cond)(rule)这种方式既避免了字符串拼接的语法错误,也消除了
eval带来的安全隐患。
内容的提问来源于stack exchange,提问作者user765443
相关产品推荐
相关产品推荐

