Python 评估(字符串 == 字符串)
Python eval(string == string)
我正在尝试使用 eval 函数读取字符串并评估字符串中的内容。
a = 'red'
b = '=='
c = 'red'
print(eval(a+b+c))
它给我一个错误
NameError: name 'red' is not defined
注意:我知道它评估为 red==red 并将其作为变量而不是字符串读取,但不知道如何在评估过程中将其设为字符串,即 'red'=='red'
比起我用 ast 试过的
import ast
ast.literal_eval(a+b+c)
但报错:
ValueError: malformed node or string: <_ast.Compare object at 0x035706F0>
比我试过ast.parse
但我不想根据运算符编写单独的 function/method
如果只用 eval
就可以完成 function/method
任何有用资源的建议或链接将不胜感激。
a = "'red'"
c = "'red'"
更通用的方法是使用 repr
:
repr('red') # -> "'red'"
repr('"blue"') # -> '\'"blue"\'' (this does actually evaluate to '"blue"')
虽然您的想法很糟糕并且可以通过其他方式完成,但您需要在字符串中添加引号:
a = '\'red\''
b = ' == '
c = '\'red\''
或
a = '"red"'
b = ' == '
c = '"red"'
或
a = "'red'"
b = ' == '
c = "'red'"
这些都应该有效。根据您想要的报价类型和您愿意进行的转义量,您可以做出选择。
附带说明一下,对于您的特定示例,您不需要使用 eval
:
a == c
将给出评估结果。如果您担心不知道运算符,请使用 dict
和 operator
模块:
import operator
ops = {
'==': operator.eq,
'<': operator.lt,
'<=': operator.le,
...
}
ops[b](a, c)
我正在尝试使用 eval 函数读取字符串并评估字符串中的内容。
a = 'red'
b = '=='
c = 'red'
print(eval(a+b+c))
它给我一个错误
NameError: name 'red' is not defined
注意:我知道它评估为 red==red 并将其作为变量而不是字符串读取,但不知道如何在评估过程中将其设为字符串,即 'red'=='red'
比起我用 ast 试过的
import ast
ast.literal_eval(a+b+c)
但报错:
ValueError: malformed node or string: <_ast.Compare object at 0x035706F0>
比我试过ast.parse
但我不想根据运算符编写单独的 function/method
如果只用 eval
就可以完成 function/method
任何有用资源的建议或链接将不胜感激。
a = "'red'"
c = "'red'"
更通用的方法是使用 repr
:
repr('red') # -> "'red'"
repr('"blue"') # -> '\'"blue"\'' (this does actually evaluate to '"blue"')
虽然您的想法很糟糕并且可以通过其他方式完成,但您需要在字符串中添加引号:
a = '\'red\''
b = ' == '
c = '\'red\''
或
a = '"red"'
b = ' == '
c = '"red"'
或
a = "'red'"
b = ' == '
c = "'red'"
这些都应该有效。根据您想要的报价类型和您愿意进行的转义量,您可以做出选择。
附带说明一下,对于您的特定示例,您不需要使用 eval
:
a == c
将给出评估结果。如果您担心不知道运算符,请使用 dict
和 operator
模块:
import operator
ops = {
'==': operator.eq,
'<': operator.lt,
'<=': operator.le,
...
}
ops[b](a, c)