mirror of
https://github.com/octocat/Hello-World.git
synced 2026-06-04 14:17:09 +00:00
- evaluator.evaluate(expr, extra_names) returns (result_str, is_error) - blocks __builtins__ to prevent arbitrary code execution - handles ZeroDivisionError, ValueError, NameError with friendly messages - builtins.SAFE_NAMES covers trig, hyperbolic, log, exp, rounding, constants
23 lines
682 B
Python
23 lines
682 B
Python
from calc.engine.builtins import SAFE_NAMES
|
|
|
|
|
|
def evaluate(expr: str, extra_names: dict = None) -> tuple[str, bool]:
|
|
"""
|
|
Evaluate a math expression safely.
|
|
Returns (result_string, is_error).
|
|
"""
|
|
namespace = dict(SAFE_NAMES)
|
|
if extra_names:
|
|
namespace.update(extra_names)
|
|
try:
|
|
result = eval(expr, {"__builtins__": {}}, namespace)
|
|
return str(result), False
|
|
except ZeroDivisionError:
|
|
return "Error: Division by zero", True
|
|
except ValueError as err:
|
|
return f"Error: {err}", True
|
|
except NameError as err:
|
|
return f"Error: {err}", True
|
|
except Exception as err:
|
|
return f"Error: {err}", True
|