python eval() 进行条件匹配
最近开发一个功能,根据条件表达式过滤数据,其中用到了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() 进行条件匹配的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python:eval的妙用和滥用
时间 2014-07-08 13:05:24 CSDN博客 原文 http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...
- grep 和 perl多个条件匹配
grep和perl多个条件匹配使用‘|’作为分割符号 grep -E 'abc|def' perl if(/abc|def/)
- python 语句:条件、循环、break、continue...
1. 条件语句 执行条件:判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. [Python程序语言指定任何非0和非空(null)值为true,0 或 ...
- Python基础:条件判断与循环的两个要点
一.条件判断: Python中,条件判断用if语句实现,多个条件判断时用if...elif实现:看下面一段程序 #python 3.3.5 #test if...elif age = 20 if ag ...
- Python基础之条件语句和循环
条件语句 Python中的条件语句分为 if ...else . if ...elif...else 以及if ...else 的嵌套使用: username = input('请输入您的用户名:' ...
- python——eval()函数
eval()函数用来执行一个字符串表达式,并返回表达式的值. 语法:eval(expression[, globals[, locals]]) x = 4 print(eval('3 * x'))12 ...
- #7 Python顺序、条件、循环语句
前言 上一节讲解了Python的数据类型和运算,本节将继续深入,涉及Python的语句结构,相当于Python的语法,是以后编写程序的重要基础! 一.顺序语句 顺序语句很好理解,就是按程序的顺序逻辑编 ...
- 【Python】-NO.99.Note.4.Python -【Python3 条件语句 循环语句】
1.0.0 Summary Tittle:[Python]-NO.99.Note.4.Python -[Python3 条件语句 循环语句] Style:Python Series:Python Si ...
随机推荐
- laravel框架api路由
Route::group(['namespace' => 'Api'], function (){ Route::any('send','SmsController@send'); }); gr ...
- Android_Activity的生命周期、跳转方式及参数传递、启动模式。
Activity的生命周期: onCreat ,onStart,onResume,onPause,onRestart,onStop,onDestroy Activity之间的跳转分为显式跳转和隐式跳转 ...
- C#之Quartz任务调度的使用(2.2.3.400)
这里使用的Quartz版本号为2.2.3.400,.net 框架为4.0. 目的实现一个小案例,每隔一秒钟打印一条记录.后面会附上源码,以供参考. 建立一个 控制台程序. 代码: class Pro ...
- Linux修复日志
阿里云后台系统报告漏洞,解决记录 中级: RHSA-2019:0049-重要: systemd 安全更新
- [CF546C] Soldier and Cards - 模拟
两个人玩牌,首先两个人都拿出自己手牌的最上面的进行拼点,两张拼点牌将都给拼点赢得人,这两张牌放入手牌的顺序是:先放对方的牌再放自己的.若最后有一个人没有手牌了,那么他就输了,求输出拼点的次数和赢得人的 ...
- 安装postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题
安装postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题 解决办法: 1.安装系统更新补丁KB2533623,下 ...
- SpringBoot学习- 10、设计用户角色权限表
SpringBoot学习足迹 前几节已经基本了解了SpringBoot框架常用的技术,其他的消息队列,定时器等技术暂时用不到,真正项目中如果基于微信系,阿里系开发的话,还要了解平台专用的技术知识,学习 ...
- vue使用kkfileview文件预览功能
1.环境要求: java 1.8+ 2.部署运行: 本机以及虚拟机上运行: 1.从https://gitee.com/kekingcn/file-online-preview/releases地址下载 ...
- 在SQL2005中修改数据库名称
SQL Server 2005中有个数据库HT_WisdomDataBaseCenter,现在要将其改名为HT_NBSBOneNetcs1步骤:(1) 分离数据库:打开management studi ...
- 继 “多闪”后“飞聊”再被diss?其实社交还能这么玩
近日头条低调上线了新的社交APP——飞聊,目前在AppStore社交排行榜第7位.但很多人使用了之后都觉得新产品的各个功能都让人想起其他的产品.兴趣小组让人想到豆瓣的兴趣小组,生活动态让人想到微博动态 ...