7
我有下面的代碼,它使用了eval
功能:EVAL給語法錯誤
lines = self.fulltext.splitlines()
CURRENT = 0
extractors = { "solar zenith angle" : (CURRENT, 1, "self.solar_z"),
"ground pressure" : (CURRENT, 2, "self.ground_pressure")
}
print locals()
for line in lines:
for label, details in extractors.iteritems():
if label in line:
if details[0] == CURRENT:
values = line.split()
eval("%s = values[%d]" % (details[2], details[1]))
然而,當我運行它,我得到以下錯誤:
eval("%s = values[%d]" % (details[2], details[1]))
File "<string>", line 1
self.solar_z = values[1]
^
SyntaxError: invalid syntax
爲什麼是這樣? self.solar_z
被定義,並且被評估的語句看起來是正確的。
這是一個壞主意。如果需要按字符串存儲值,請使用「dict」,不要動態創建變量。這至少與簡單的一樣,不會影響你的範圍,不需要關聯潛在的安全風險,更難以破解(例如,它可能會導致語法錯誤),性能更好等等。 - 它更好,而且由於那個大魔頭。 (這與函數式編程沒有任何關係。) – delnan
@delnan:我使用這樣的變量的原因是我想讓類的用戶以class.variable的形式訪問變量,而不是必須做class.dict ['variablename']。 – robintw
你可以通過在類中添加一個'__getattr__'方法來實現。 –