好了,几乎每个人都在那里说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