好了,幾乎每個人都在那裏說eval
是邪惡的,這是對的情況下,99%的真...但我在這裏問一些一段代碼,我寫了一個使用eval
,SO,這是危險嗎?EVAL()。這是危險的嗎?
我試圖清理數據,最有可能,同時保持原有的funtionality,但是這使得eval
使用和東西可以去錯了:
import os
try:
if os.environ["LANG"].rstrip('''\n''')[5:] == ".UTF-8":
Language = str(os.environ["LANG"].rstrip('''\n''').rstrip(os.environ["LANG"].rstrip('''\n''')[5:]))
eval (str("LP." + Language + "()"))
else:
raise Exception("Not an UTF-8 locale")
except KeyError:
LP.Fallback()
except AttributeError:
LP.Fallback()
首先,該代碼應該下運行UNIX和衍生物。
中寫道python2.7。
這樣做是調用LP
類中的一些方法。
我alredy試圖搞砸了我的電腦想我LANG
系統變量更改爲可能損害我的電腦,像rm -rf /
或同類者任意字符串,但是,因爲我的代碼刪除LANG
VAR &的最後5個字符增加LP.
開始和()
末,它的結果是這樣,就不能不提,它從一開始檢查,如果該字符串的最後5個字符是UTF-8
,但如果我刪除條件,這應該是「有害」的命令:
LP.rm -r()
到現在爲止,我已經注意到d,任何命令超過5個字符長將無法繞過的代碼的「刪除最後5個字符」線,並且所添加的LP.
& ()
應足以中和傷害的任何嘗試。
直到現在,我會保持」 .UTF-8" ,以避免任何嚴重的錯誤......
這個工作,因爲它應該。不知道'endswitch'和'getattr',事情對這些工作更好。如此快速的迴應,謝謝! P.S:'eval' 100%可以用其他命令替換嗎?或者有時它是唯一的解決方案? – PythonNoob
我相信有時候它是唯一的解決方案,否則它不會在語言中。他們應該是相當罕見的。 –
好的,感謝所有這些信息。 – PythonNoob