最近开发一个功能,根据条件表达式过滤数据,其中用到了eval(条件字符串,字典)
发现一个现象:
>>> print u"campGrade in [ '\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed', ]"
campGrade in [ '减脂体验班', ]
>>> print {'campGrade':u'\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed'}
{'campGrade': u'\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed'}
>>> print u'\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed'
减脂体验班
此时,若直接判断,会返回 False
>>> eval(u"campGrade in [ '\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed', ]", {'campGrade':u'\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed'})
:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
False
字典中的unicode 需要转化成 str,如下:
>>> eval(u"campGrade in [ '\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed', ]", {'campGrade':'减脂体验班'})
True
代码中可以添加.encode("utf-8"),将unocode转换成str形式!
>>> eval(u"campGrade in [ '\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed', ]", {'campGrade':u'\u51cf\u8102\u8425\u6559\u7ec3\u4f53\u9a8c\u73ed'.encode("utf-8")})
True