安全地使用raw_input生成的字符串(Python)

时间:2012-08-24 05:39:24

标签: python user-input raw-input

我想知道如何安全地使用raw_input中的字符串,这样我就可以创建一个函数来替换它,以便用来轻松安全地使用它。

原因是我正在尝试使用python制作一个生成应用程序的字符表,并且需要能够使用名称来获取字符的全名作为字符串以便于访问(Charname_NLB)

但是,由于我希望将其用于更多应用程序,因此我需要使用此备用命令将其用作作为原始输入输入的任何字符串。

为了简单起见,我已经有一个类似的输入整数的部分,并希望将它集成到同一个类中。我将在此发布,感谢:Mgilson和BlueKitties(分别来自这里和www.python-forum.org)

    def safeinput(get_num):
            num = float(raw_input(get_num))
            return num

但是如果这不会安全地返回与基本输入命令相同的结果,我可以获得一个工作副本,因为我目前只有一个概念证明可以使用,并且对于截断的数字它不准确

**编辑:通过“任何字符串”,我的意思是结果将存储为字符串,而不是用作命令。

1 个答案:

答案 0 :(得分:3)

不确定这是否是您要求的。 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