1

我想知道如何安全地使用 raw_input 中的字符串,以便我可以创建一个函数来将其替换为易于安全使用的脚本。

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

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

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

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

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

**编辑:“任何字符串”是指结果将存储为字符串,而不是用作命令。

4

1 回答 1

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
于 2012-08-24T06:07:06.227 回答