我试图使用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
函数/方法
任何有用资源的建议或链接都将受到赞赏。
答案 0 :(得分:2)
虽然你正在做的是一个糟糕的想法,并且可以通过其他方式完成,但你需要在字符串中添加引号:
a = '\'red\''
b = ' == '
c = '\'red\''
OR
a = '"red"'
b = ' == '
c = '"red"'
OR
a = "'red'"
b = ' == '
c = "'red'"
其中任何一个都应该有用。根据您想要的报价类型和您愿意逃避的金额来选择您的。
在旁注中,您不需要使用eval
作为您的特定示例:
a == c
将给出eval的结果。如果您担心不知道运营商,请使用dict
和operator
模块:
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'"