Python eval(string == string)

时间:2017-12-20 19:23:46

标签: python string python-3.x eval

我试图使用eval函数来读取字符串并评估字符串中的内容。

a = 'red'
b = '=='
c = 'red'
print(eval(a+b+c))

它给我一个错误

NameError: name 'red' is not defined

注意:我知道它评估为红色==红色并将其作为变量而不是字符串读取但不知道如何在评估过程中使其成为字符串,即' red' ==' red& #39;

比我尝试使用ast

import ast
ast.literal_eval(a+b+c)

但是出错了:

ValueError: malformed node or string: <_ast.Compare object at 0x035706F0>

比我试过ast.parse 但我不想写基于运算符的单独函数/方法 如果只能用eval函数/方法

完成

任何有用资源的建议或链接都​​将受到赞赏。

2 个答案:

答案 0 :(得分:2)

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

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

OR

a = '"red"'
b = ' == '
c = '"red"'

OR

a = "'red'"
b = ' == '
c = "'red'"

其中任何一个都应该有用。根据您想要的报价类型和您愿意逃避的金额来选择您的。

在旁注中,您不需要使用eval作为您的特定示例:

a == c

将给出eval的结果。如果您担心不知道运营商,请使用dictoperator模块:

import operator

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

答案 1 :(得分:1)

Route::get('register/verify/{token}', 'Auth\RegisterController@verify');

更常见的方法是使用$this->guard()->login($user);

a = "'red'"
c = "'red'"