热线电话:13121318867

登录
2018-10-23 阅读量: 817
python错误解析(二)

代码如下:

>>> from math import sqrt  
>>> exec "sqrt = 1"
>>> sqrt(4)

Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
sqrt(4)
TypeError: 'int' object is not callable

【错误分析】exec语句最有用的地方在于动态地创建代码字符串,但里面存在的潜在的风险,它会执行其他地方的字符串,在CGI中更是如此!比如例子中的sqrt = 1,从而改变了当前的命名空间,从math模块中导入的sqrt不再和函数名绑定而是成为了一个整数。要避免这种情况,可以通过增加in <scope>,其中<scope>就是起到放置代码字符串命名空间的字典。

复制代码

代码如下:

>>> from math import sqrt  
>>> scope = {}
>>> exec "sqrt = 1" in scope
>>> sqrt(4)
2.0
0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子