You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从文件读取规则动态生成查询遇报错,寻求技术解决方案

动态生成查询语句报错的解决思路

你的代码报错是因为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:05:22