用逻辑运算符评估python表达式

时间:2017-11-07 09:50:54

标签: python

我试图用算术和逻辑运算来评估表达式。我对输出很困惑。

例如:

import pandas
import numpy as np
import os

df=pandas.read_excel(os.getcwd() + r"/excel.xlsx", sheet=0, skiprows=0,)
df['order_num']=np.nan

我在&之后给出条件的输出。运营商。是不是我们不能在eval中使用逻辑运算

df.set_value(index, 'order_num', 'somestr')

使用OR运算符,它给出了不同的输出。

当我尝试在表达式中使用浮点值时,它会抛出TypeError

eval('100 >= 1000 & 100 >= 95')
True   ==> Wrong   

eval('400 >= 0 & 400 >= 0')
True  ==> Right

在没有逻辑操作的情况下使用它,

eval('400 >= 5000 | 400 >= 0')
False   ==> Wrong

在这里感到困惑。

2 个答案:

答案 0 :(得分:3)

Python逻辑运算符名为andor - &|是按位运算符。所以你想要:

eval('400 >= 5000 or 400 >= 0')

话虽如此,eval()非常不安全,所以不要传递用户输入......

答案 1 :(得分:1)

按位逻辑运算符的优先级高于等式。这里没有eval特有的内容。

>>> eval('(400 >= 5000) | (400 >= 0)')
True

您应该使用or才能拥有正确的优先权:

>>> eval('400 >= 5000 or 400 >= 0')
True

如@bruno desthuilliers所述,eval不是你应该在用户输入上使用的东西。您应该在用户输入和Python操作之间构建自己的映射。如果您真的想构建Python表达式,可能需要查看the ast module