Strings पर Mathematical Expressions Evaluate करना
आप Mathematical Expressions को Strings में Evaluate करने के लिए eval Function का उपयोग कर सकते हैं।
उदाहरण
उदाहरण के लिए, यदि आपके पास Content (4*5) + 21 वाला String है, तो आप इसे Eval कर सकते हैं और Result प्राप्त कर सकते हैं।
>>> s = "(4*5) + 22" >>> eval(s) 42
eval Python Rules को Follow करता है Mathematical Expressions Evaluate करने के लिए उन Cases में जहां Parentheses प्रदान नहीं किए गए हैं, आदि।
⚠️ Security Warning - बहुत सावधान रहें!
eval का उपयोग करते समय बहुत सावधान रहें क्योंकि यह Huge Security Loopholes और Bugs का Source हो सकता है।
# DANGEROUS EXAMPLES - कभी न करें:
eval("__import__('os').system('rm -rf /')") # System Command Execution!
eval("open('/etc/passwd').read()") # File Read!
eval("__import__('subprocess').run(['ls'])") # Command Execution!
Safer Alternatives:
1. ast.literal_eval (केवल Literals के लिए):
import ast
# Safe - केवल Literals
ast.literal_eval("[1, 2, 3]") # [1, 2, 3]
ast.literal_eval("{'a': 1}") # {'a': 1}
ast.literal_eval("(4*5) + 22") # ValueError - Expression नहीं है!
2. Simple Calculator (Safe Subset):
import re
import operator
OPS = {
'+': operator.add, '-': operator.sub,
'*': operator.mul, '/': operator.truediv,
'//': operator.floordiv, '%': operator.mod,
'**': operator.pow,
}
def safe_eval(expr):
"""Simple Arithmetic Only - No Functions, Names, etc."""
# Validate: Only Numbers, Operators, Parentheses, Spaces
if not re.match(r'^[\d\s+\-*/().%]+$', expr):
raise ValueError("Invalid Characters")
# Additional Safety: No Double Operators, etc.
# ... Validation Logic ...
return eval(expr, {"__builtins__": {}}, {}) # No Builtins!
3. Use a Parser Library:
# pip install pyparsing from pyparsing import * # Or use dedicated expression evaluators like: # - simpleeval # - numexpr # - asteval
Bottom Line:
Production Code में कभी भी eval() का उपयोग न करें जब तक कि Input पूरी तरह से Trusted न हो। Safer Alternatives का उपयोग करें।