当前位置: 首页 > 编程笔记 >

Python eval()

姜弘新
2023-03-14
本文向大家介绍Python eval(),包括了Python eval()的使用技巧和注意事项,需要的朋友参考一下

eval()方法解析传递给此方法的表达式,并在程序中运行该表达式。换句话说,它将字符串解释为python程序中的代码。

语法

eval的语法如下-

eval(expression, globals=None, locals=None)

哪里

  • 表达式-这是传递给方法的python表达式。

  • globals-可用的全局html" target="_blank">方法和变量的字典。

  • locals-可用的本地方法和变量的字典。

在下面的示例中,我们允许用户确定一个表达式并运行一个python程序来评估该表达式。因此,它有助于创建动态代码。

示例

# expression to be evaluated
user_expr = raw_input("Enter an expression in terms of variable a):")
#nter the value of variable
a = int(raw_input("输入值a"))
# evaluate the expression
result = eval(user_expr)
# printing evaluated result
print("Result = {}".format(result))

输出结果

运行上面的代码给我们以下结果-

Enter an expression in terms of variable a):a*(a-3)+a^2
输入值a7
Result = 33

安全问题 eval()

对于涉及Web应用程序或桌面程序的程序,使用这种eval()方法可能会产生安全漏洞,因为运行该程序的用户可能会提供表达式,这些表达式是系统命令,用于删除文件或从系统中获取敏感数据。为了防止这种情况发生,我们可以将eval()函数限制为某些选定的函数或变量。

防止这些漏洞的步骤如下-

省略方法中的局部变量和全局变量eval()

这样,它将仅在当前范围内进行评估,而不会在此范围之外找到其他变量。

仅省略本地参数

省略局部变量时,所有变量的作用域均作为全局变量。接下来,我们将空字典作为全局变量传递,即使将其他库导入到程序中,该字典也仅允许内置变量可用。

示例

from time import *
print(eval('dir()', {}))

运行上面的代码给我们以下结果-

['__builtins__']

接下来,我们还只允许导入的库中的某些方法可供程序使用。

from time import *
print(eval('dir()', {'sleeptime': sleep, 'Localtime': localtime}))
输出结果

运行上面的代码给我们以下结果-

['Localtime', '__builtins__', 'sleeptime']

将选择功能传递给全局和局部

我们也可以通过不允许任何内置插件,而只允许本地导入的库中的一部分来限制本地和全局范围内功能的可用性。在下面的示例中,我们仅从时间库中提供了gmtime方法。

示例

from time import *
a = 1445945763
print(eval('gmtime(a)', {'__builtins__': None}, {'a': a, 'gmtime': gmtime}))
输出结果

运行上面的代码给我们以下结果-

time.struct_time(tm_year=2015, tm_mon=10, tm_mday=27, tm_hour=11, tm_min=36, tm_sec=3, tm_wday=1, tm_yday=300, tm_isdst=0)
 类似资料:

相关阅读

相关文章

相关问答