python 中 eval 的字符串转换
我有一个像这样的列表:
['name','country_id', 'price','rate','discount', 'qty']
字符串表达式
exp = 'qty * price - discount + 100'
和一个像我想将此表达式转换成的
exp = 'obj.qty * obj.price - obj.discount + 100'
,因为我想评估这个表达式,如 eval(exp or False, dict(obj=my_obj))
我的问题是什么生成 python eval 评估表达式的最佳方法......
I have list like:
['name','country_id', 'price','rate','discount', 'qty']
and a string expression like
exp = 'qty * price - discount + 100'
I want to convert this expression into
exp = 'obj.qty * obj.price - obj.discount + 100'
as I wanna eval this expression like eval(exp or False, dict(obj=my_obj))
my question is what would be the best way to generate the expression for python eval evaluation....
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当然,您必须非常小心 使用评估。知道为什么您需要为此使用 eval 会很有趣
如果恶意用户找到一种方法将非数字数据放入字段中,这种方式会更难发生不好的事情
Of course you have to be very careful using eval. Would be interesting to know why you need to use eval for this at all
This way makes it harder for something bad to happen if a malicious user finds a way to put non numeric data in the fields
我假设您拥有的列表是可用 obj 属性的列表。
如果是这样,我建议使用正则表达式,如下所示:
I assume that the list you have is the list of available obj properties.
If it is so, I'd suggest to use regular expressions, like this:
最简单的方法是循环遍历每个潜在变量,并替换目标字符串中它们的所有实例。
输出:
The simplest way would be to loop through each of your potential variables, and replace all instances of them in the target string.
Output: