javax的eval()函数执行异常,传入"10 + 10"类字符串直接报错如何解决?
常见触发原因及排查方案
- 先确认传入
eval的实际字符串和你预期的是否一致
很多时候看起来是"10 + 10"的字符串,实际可能包含全角字符、不可见控制字符(比如零宽空格、换行符、制表符),可以打印每个字符的编码确认:如果是Python环境可以执行print([ord(c) for c in 待传入的字符串]),JS环境可以执行console.log([...待传入的字符串].map(c => c.charCodeAt(0))),排查是否有超出数字、半角运算符、半角空格范围的字符。 - 检查是否存在
eval被覆写的情况
排查你自己的代码或者引用的第三方依赖,有没有定义过同名的eval函数替换了原生实现,导致合法表达式传入也报错。 - 确认运行环境是否禁用了
eval
部分安全加固的运行环境(比如受限的浏览器沙箱、开启安全策略的Node.js、Python沙箱环境)会直接禁用eval调用,执行时直接抛出异常。 - 排查表达式是否混入了未定义内容
注意区分肉眼易混淆的字符,比如小写字母l和数字1、大写字母O和数字0,如果表达式里混入了这类未定义的变量名,也会直接触发异常。
优化建议
如果你的使用场景只有纯算术表达式计算,完全不需要用eval,既存在代码注入的安全风险,也容易出现这类异常问题,可以替换为专门的算术表达式解析库,或者自己实现简单的拆分运算逻辑即可。
内容的提问来源于stack exchange,提问作者Rahasyar Desh
相关产品推荐
相关产品推荐

