ast.literal_eval
काम नहीं करना चाहिए चाहते हो सकता है चूंकि (दस्तावेज़ों से) "प्रदान की गई स्ट्रिंग या नोड में केवल निम्नलिखित पायथन शाब्दिक संरचनाएं हो सकती हैं: तार, संख्याएं, ट्यूपल्स, सूचियां, डिब्बे, बूलियन, और कोई नहीं।"। अभिव्यक्ति 20<30
को किसी प्रकार का मूल्यांकन की आवश्यकता है, इससे पहले कि bool
लौटाता है।
eval
, यानी eval
पर जाने से पहले ऑपरेटर पर स्ट्रिंग को विभाजित करना और literal_eval
एक सुरक्षित सुझाव होगा।
import ast
expr = "20 < 30"
operator = "<"
lhs,rhs = map(ast.literal_eval, map(str.strip, expr.split(operator)))
eval("%s %s %s"%(lhs,operator,rhs))
जब lhs,rhs
का मूल्यांकन एक try, except
खंड में बात रैपिंग कुछ इनपुट त्रुटियां पकड़ सकता है।
धन्यवाद उस – RickyA