最近开发一个功能,根据条件表达式过滤数据,其中用到了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'})
<string>: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

python eval() 进行条件匹配的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. Python:eval的妙用和滥用

    时间 2014-07-08 13:05:24 CSDN博客 原文  http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...

  3. grep 和 perl多个条件匹配

    grep和perl多个条件匹配使用‘|’作为分割符号 grep -E 'abc|def' perl if(/abc|def/)

  4. python 语句:条件、循环、break、continue...

    1. 条件语句 执行条件:判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. [Python程序语言指定任何非0和非空(null)值为true,0 或 ...

  5. Python基础:条件判断与循环的两个要点

    一.条件判断: Python中,条件判断用if语句实现,多个条件判断时用if...elif实现:看下面一段程序 #python 3.3.5 #test if...elif age = 20 if ag ...

  6. Python基础之条件语句和循环

    条件语句 Python中的条件语句分为 if ...else . if ...elif...else  以及if ...else 的嵌套使用: username = input('请输入您的用户名:' ...

  7. python——eval()函数

    eval()函数用来执行一个字符串表达式,并返回表达式的值. 语法:eval(expression[, globals[, locals]]) x = 4 print(eval('3 * x'))12 ...

  8. #7 Python顺序、条件、循环语句

    前言 上一节讲解了Python的数据类型和运算,本节将继续深入,涉及Python的语句结构,相当于Python的语法,是以后编写程序的重要基础! 一.顺序语句 顺序语句很好理解,就是按程序的顺序逻辑编 ...

  9. 【Python】-NO.99.Note.4.Python -【Python3 条件语句 循环语句】

    1.0.0 Summary Tittle:[Python]-NO.99.Note.4.Python -[Python3 条件语句 循环语句] Style:Python Series:Python Si ...

随机推荐

  1. gulp-sass设置不同样式风格的输出方法

    sass最终输出的样式包括下面几种样式风格:嵌套输出方式 nested展开输出方式 expanded 紧凑输出方式 compact 压缩输出方式 compressed sass: nav { ul { ...

  2. spring整合websocket,如何在服务端依赖注入service

    1.在pom.xml文件中添加jar包: <properties> <spring.version>4.0.5.RELEASE</spring.version> & ...

  3. window10安装nginx及请求转发到tomcat服务器访问项目及开机自启

    一.安装ngnix 1.  到nginx官网上下载相应的安装包,http://nginx.org/en/download.html: 下载进行解压,将解压后的文件放到自己心仪的目录下,我的解压文件放在 ...

  4. [POI2010] GRA-The Minima Game - 贪心,dp,博弈论

    给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下,最终A的 ...

  5. gulp打包js多个文件夹并压缩混淆,编译ES6语法,及多个import依赖由一个入口打包成一个cdn

    感觉和webpack的步骤差不多 首先安装gulp:参考上一篇 安装完之后 新建一个文件目录起名 在当前目录下打开cmd 执行:npm init 创建package.json文件 然后安装第一个插件g ...

  6. (四)tensorflow-基础(数据类型,张量操作,数学运算)

    摘要: 1.数据类型:标量.向量.矩阵.张量  :数值精度:变量(张量) 2.张量操作:索引.切片.维度操作 3.数学运算:加减乘除(整除和余除):乘方(平方.开方.指数):自然底对数(任意底对数需要 ...

  7. Three.js的开始(附代码)_2

    1 下载Three.js代码 https://github.com/mrdoob/three.js/tree/master/build 2 引用方法 在HTML中添加以下代码: <script ...

  8. PHP 中 16 个魔术方法详解

    PHP 中 16 个魔术方法详解   前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...

  9. Sql Server:创建用户并指定该用户只能看指定的视图,除此之外的都不让查看

    1,在sql server中选择好要操作的数据库 2,--当前数据库创建角色 exec sp_addrole 'seeview'      --创建了一个数据库角色,名称为:[seeview] 3,- ...

  10. [Codechef - AASHRAM] Gaithonde Leaves Aashram - 线段树,DFS序

    [Codechef - AASHRAM] Gaithonde Leaves Aashram Description 给出一棵树,树的"N"节点根植于节点1,每个节点'u'与权重a[ ...