Python eval()
该eval()
方法解析传递给此方法的表达式,并在程序中运行该表达式。换句话说,它将字符串解释为python程序中的代码。
语法
eval的语法如下-
eval(expression, globals=None, locals=None)
哪里
表达式-这是传递给方法的python表达式。
globals-可用的全局方法和变量的字典。
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()', {}))