我想知道如何安全地使用raw_input中的字符串,这样我就可以创建一个函数来将其替换为一个易于安全使用的脚本。
原因是我正在尝试使用python制作一个生成字符表的应用程序,并且需要能够使用易于访问的名称(Charname_NLB)将字符的全名作为字符串传递
然而,由于我希望将其用于更多的应用程序,因此我需要使用此备用命令将其用于作为原始输入输入的任何字符串。
我已经有了一个类似的整数输入部分,为了简单起见,我想把它集成到同一个类中。我会把它发布在这里,感谢:Mgilson和BlueKitties(分别来自这里和www.python-forum.org)
def safeinput(get_num):
num = float(raw_input(get_num))
return num
但是,如果这不能安全地返回与基本输入命令相同的结果,我可以获得一个有效的副本吗?因为我目前只有一个概念验证可以使用,而且使用截断的数字是不准确的。
**编辑:我所说的"任何字符串",特别是指结果将存储为字符串,而不是用作命令。
不确定这是否是您想要的。literal_eval
是安全的,但仅适用于文字。如果必须对输入进行消毒,则很难安全使用eval()
>>> from ast import literal_eval
>>> def safeinput(s):
... try:
... return literal_eval(s)
... except:
... return s
...
>>> repr(safeinput("1"))
'1' # converted to an int
>>> repr(safeinput("1.1"))
'1.1' # converted to a float
>>> repr(safeinput("'some string in quotes'"))
"'some string in quotes'" # converted to a string
>>> repr(safeinput("some string without quotes"))
"'some string without quotes'" # no conversion necessary