Python eval(string==string)

Python eval(string==string),python,string,python-3.x,eval,Python,String,Python 3.x,Eval,我试图使用eval函数来读取字符串并计算字符串中的内容 a = 'red' b = '==' c = 'red' print(eval(a+b+c)) 这给我带来了一个错误 NameError: name 'red' is not defined 注:我知道它的计算结果为红色==红色,并将其作为变量而不是字符串读取,但不知道如何在求值过程中使其成为字符串,即“红色”==红色 比我用ast试过的要多 import ast ast.literal_eval(a+b+c) 但给出了一个错误: V

我试图使用eval函数来读取字符串并计算字符串中的内容

a = 'red'
b = '=='
c = 'red'
print(eval(a+b+c))
这给我带来了一个错误

NameError: name 'red' is not defined
注:我知道它的计算结果为红色==红色,并将其作为变量而不是字符串读取,但不知道如何在求值过程中使其成为字符串,即“红色”==红色

比我用ast试过的要多

import ast
ast.literal_eval(a+b+c)
但给出了一个错误:

ValueError: malformed node or string: <_ast.Compare object at 0x035706F0>
ValueError:节点或字符串格式错误:
然后我尝试了
ast.parse
但是我不想写基于运算符的分离函数/方法 如果只能使用
eval
函数/方法执行

如有任何建议或有用资源的链接,将不胜感激

a = "'red'"
c = "'red'"
更通用的方法是使用
repr

repr('red') # -> "'red'"
repr('"blue"') # -> '\'"blue"\'' (this does actually evaluate to '"blue"')

虽然您所做的是一个糟糕的想法,并且可以通过其他方式完成,但您需要在字符串中添加引号:

a = '\'red\''
b = ' == '
c = '\'red\''

所有这些都应该有效。你可以根据你想要的报价类型和你愿意逃避的程度来选择

另一方面,您不需要对特定示例使用
eval

a == c
将给出评估结果。如果您担心不认识操作员,请使用
dict
操作员
模块:

import operator

ops = {
    '==': operator.eq,
    '<': operator.lt,
    '<=': operator.le,
    ...
}
ops[b](a, c)
导入操作符
ops={
“=”:operator.eq,

'您应该先阅读
eval
的工作原理和/或尝试将
red==red
作为终端中的第一个表达式。@Moses“注意:我知道它的计算结果为red==red,并将其作为变量读取,而不是字符串“@pycoder”和/或'这是正确的方法。查找正确的运算符,并且知道,用它来操作。我知道我也可以直接做A==B,这只是我在表达式求值器上工作的一个例子,L,所以我不能知道左和右值,@ VAIBHAV。在这种情况下,你仍然应该考虑使用除<代码> EVA< /代码>以外的工具。<代码> AST/CODE >是PRO。bably走在正确的方向上。看看它为您提供的一切。@Vaibhav。同时,@pycoder关于使用
repr
的建议将满足您的需要。使用
repr
的好建议
a == c
import operator

ops = {
    '==': operator.eq,
    '<': operator.lt,
    '<=': operator.le,
    ...
}
ops[b](a, c)