首页 > 解决方案 > eval() 的更好替代方案

问题描述

我正在寻找 python 字符串评估器的替代品eval()

from telethon import Button

c = "Click Here To Open Google | [Button.url('Google', 'google.com')]"
if "|" in c:
   filter, options= c.split("|")
filter = filter.strip()     
button = options.strip()

g = eval(button)
await event.reply(filter, buttons=g)

这里的使用与此相关eval()是危险的,我可以用什么替代?

标签: pythonevaltelethon

解决方案


一个更安全的替代方法是ast.literal_eval,但与 相比,它非常受限制eval(),仅适用于代表有效 Python 文字的字符串,至少对于您的示例而言。

更好的建议是自己解析字符串,首先您可以使用正则表达式获取两个参数:

import re

c = "Click Here To Open Google | [Button.url('Google', 'google.com')]"
if "|" in c:
   filter, options= c.split("|")
filter = filter.strip()     
button = options.strip()
params = re.findall(r'\'(.*)\'',button)

它返回["Google', 'google.com"]in 的列表params

然后你可以if用来检查它是否包含恶意输入,如果然后修改它或阻止用户,否则解压到使用的方法Button.url(*params)


推荐阅读