在python中获得安全的用户输入

时间:2013-07-20 09:44:44

标签: python input raspberry-pi

我正在编写一个需要用户提供一些非常简单的输入的脚本,在对此进行研究时,我正陷入困境,试图找出最安全的方法。

我只想要一个整数,偶然发现(我认为是)一段很好的代码(从内存中执行此操作):

def getNumeric(prompt):
  while True:
    response = input(prompt)
    try:
      return int(response)
    except ValueError:
      print "please enter a number:",

这大部分都有效,但如果用户只按[确定]则会崩溃。事实证明,我正在使用python< 3,作者为3+写了这个。所以现在我必须重写2.7才能满足我的需求。但是我如何编写它来迎合EITHER平台< 3和3 +?

我正在写一些可供其他人使用的东西,并希望尽可能让它变得便携。我应该打扰吗?

顺便说一下,我正在为Raspberry Pi做这个,我应该将我的python升级到3,还是将它保留在原来的位置(2.7.3)?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

def getNumeric(prompt):
    while True:
        try:
            res = int(input('Enter: '))
            break
        except (ValueError, NameError):
            print("Numbers only please!")
    return res

在python 2.7中运行:

>>> getNumeric('Python 2.7: ')
Enter: hello
Numbers only please!
Enter: 123
123

在python 3中运行:

>>> getNumeric('Python 3: ')
Enter: hello
Numbers only please!
Enter: 123
123

在python 2中,如果给出的不是数字,则会引发NameError

在python 3中,如果给出的不是数字,则会引发ValueError

请注意,带有print的括号适用于2.7和3,因此在此处使用它来支持这两个版本非常有用。

答案 1 :(得分:0)

尝试:

def getNumeric(prompt):
  while True:
    response = input(prompt)
    try:
      if isinstance(response, int):
          return int(response)
      else:
          print "please enter a number:"
    except ValueError:
      print "please enter a number:"