2018-10-23
閱讀量:
853
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語句最有用的地方在于動態(tài)地創(chuàng)建代碼字符串,但里面存在的潛在的風險,它會執(zhí)行其他地方的字符串,在CGI中更是如此!比如例子中的sqrt = 1,從而改變了當前的命名空間,從math模塊中導入的sqrt不再和函數(shù)名綁定而是成為了一個整數(shù)。要避免這種情況,可以通過增加in <scope>,其中<scope>就是起到放置代碼字符串命名空間的字典。
復制代碼
代碼如下:
>>> from math import sqrt
>>> scope = {}
>>> exec "sqrt = 1" in scope
>>> sqrt(4)
2.0






評論(0)


暫無數(shù)據
推薦帖子
0條評論
0條評論
0條評論