![]() |
VOOZH | about |
Python eval() function parse the expression argument and evaluate it as a Python expression and runs Python expression (code) within the program.
Syntax: eval(expression, globals=None, locals=None)
Parameters:
- expression: String is parsed and evaluated as a Python expression
- globals [optional]: Dictionary to specify the available global methods and variables.
- locals [optional]: Another dictionary to specify the available local methods and variables.
Return: Returns output of the expression.
Python eval() is not much used due to security reasons, as we explored above. Still, it comes in handy in some situations like:
3 10
Let us explore it with the help of a simple Python program. function_creator is a function that evaluates the mathematical functions created by the user. Let us analyze the code a bit:
Output:
Enter the function(in terms of x):x*(x+1)*(x+2)
Enter the value of x:3
y = 60
Evaluating a mathematical expression using the value of the variable x.
x*(x+1)*(x+2) 60
Evaluate Boolean Expressions in Python
Here the eval statement x == 4 will evaluate to False because the value of x is 5, which is not equal to 4. In the second eval statement, x is None will evaluate to True because the value of x is None, and is None checks for object identity, not value equality.
False True
We can also evaluate condition checking on the Python eval() function.
'd' in chars tuple? False 100 > 50? True 20 is even? True
Our current version of solve_expression has a few vulnerabilities. The user can easily expose hidden values in the program or call a dangerous function, as eval will execute anything passed to it.
For example, if you input like this:
Enter the function(in terms of x):secret_function()
Enter the value of x:0
You will get the output:
result: Secret key is 1234
Also, consider the situation when you have imported the os module into your Python program. The os module provides a portable way to use operating system functionalities like reading or writing a file. A single command can delete all files in your system. Of course, in most cases (like desktop programs) the user can’t do any more than they could do by writing their own Python script, but in some applications (like web apps, kiosk computers), this could be a risk!
The solution is to restrict eval to only the functions and variables we want to make available.
Python eval function comes with the facility of explicitly passing a list of functions or variables that it can access. We need to pass it as an argument in the form of a dictionary.
Now if we try to run the above programs like:
Enter the function(in terms of x):secret_function()
Enter the value of x:0
We get the output:
NameError: name 'secret_function' is not defined
Let us analyze the above code step by step:
safe_dict = {}
for safe_key in safe_list:
safe_dict[safe_key] = locals().get(safe_key)
safe_dict['x'] = x
Here, we add the local variable x to the safe_dict too. No local variable other than x will get identified by the eval function.
y = eval(expr, {}, safe_dict)
So, in this way, we have made our eval function safe from any possible hacks!