我需要根据输入字符串“s”调用 exec() 或 eval()
如果“s”是一个表达式,在调用 eval() 之后如果结果不是 None 我想打印结果
如果“s”是一条语句,那么只需执行 exec()。如果语句恰好打印了一些东西,那就这样吧。
s = "1 == 2" # user input # --- try: v = eval(s) print "v->", v except: print "eval failed!" # --- try: exec(s) except: print "exec failed!"
例如,“s”可以是:
s = "print 123"
在这种情况下,应该使用 exec()。
当然,我不想先尝试 eval() ,如果失败就调用 exec()
最佳答案
尝试将其编译
为表达式。如果它失败了,那么它一定是一个语句(或者只是无效的)。
isstatement= False
try:
code= compile(s, '<stdin>', 'eval')
except SyntaxError:
isstatement= True
code= compile(s, '<stdin>', 'exec')
result= None
if isstatement:
exec s
else:
result= eval(s)
if result is not None:
print result
关于Python:如何判断一个字符串是代表语句还是表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876231/