使用exec 和 eval 执行和求值字符串

来源:互联网 发布:java string 换行符 编辑:程序博客网 时间:2024/05/21 03:56

1.exec
执行一个字符串的语句是exec:

>>> exec "print 'Hello world'"

但是,使用简单形式的exec语句绝不是好事,很多情况下可以给他提供命名空间-可以放置变量的地方,你想这样做,从而使代码不会干扰命名空间,比如下面代码中使用的名称sqrt:

from math import sqrtexec("sqrt = 4")sqrt(4)Traceback (most recent call last):  File "C:\Users\Administrator\eclipse-workspace\Web_Authentication\ShellExec.py", line 3, in <module>    sqrt(4)TypeError: 'int' object is not callable

exec 语句最有用的地方在可以动态的创建代码字符串,如果字符串是从其他地方获得的–很有可能是用户—那么几乎不能确定其他到底包含什么代码,所以为了安全起见可以增加一个字典,起命名空间的作用。

可以通过增加in来实现,其中就是起到放置代码字符串命名空间作用的字典。

from math import sqrtscope={}exec('sqrt=1',scope)sqrt(4)2.0scope['sqrt']1

潜在的破坏性代码并不是覆盖sqrt函数,原来的函数能正常工作,而通过exec 赋值的变量sqrt只在它的作用域内有效。
注意,如果需要将scope打印出来的话,会看到其他有用的东西,因为内建的builtins 字典自动包含所有内建函数和值:

scope['sqrt']1len(scope)2scope.keys()dict_keys(['__builtins__', 'sqrt'])
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 墨镜镜片刮花了怎么办 usb小风扇不转怎么办 金属眼镜压歪了怎么办 眼镜被电焊打了怎么办 电焊闪的眼睛疼怎么办 烧了电焊眼睛疼怎么办 用了电焊眼睛痛怎么办 烧电焊脸上红痛怎么办 眼睛让电焊晃了怎么办 眼被电焊打了怎么办 眼镜弹簧腿坏了怎么办 眼镜框铰链坏了怎么办 金属眼镜框歪了怎么办 眼镜框螺丝断了怎么办 眼镜被压变形了怎么办 金属眼镜腿断了怎么办 眼镜弹簧腿断了怎么办 眼镜腿螺丝太紧怎么办 眼镜金属柄断了怎么办 金属眼镜腿折了怎么办 眼镜腿中间断了怎么办 塑料眼镜腿断了怎么办 眼镜上的螺丝拧不紧怎么办 眼镜的把坏了怎么办 把眼镜坐坏了怎么办 梦见眼镜腿掉了怎么办 眼镜的腿掉了怎么办 眼镜腿的螺丝掉了怎么办 爱大爱眼镜掉腿了怎么办 合金眼镜腿断了怎么办 手关节复位h疼痛怎么办 我叫mt红色卡牌怎么办 星盟冲突qq登录怎么办 汽车雷达下雨一直响怎么办 火山小视频封火力怎么办 电脑被当成矿机怎么办 哥华有线机顶盒反应慢怎么办 电脑绣花机编码器坏了怎么办? 伺服电机开起没有力怎么办 西门子冰箱排水孔堵塞怎么办 数控车床西门子系统卡顿怎么办