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

在python中获取安全的用户输入,python,input,raspberry-pi,Python,Input,Raspberry Pi,我正在写一个脚本,需要用户提供一些非常简单的输入,在做了这方面的研究后,我左右为难,试图找到最安全的方法 我只想要一个整数,然后偶然发现(我认为是)一段很好的代码,类似于(从内存中执行此操作): 这主要起作用,但如果用户只按[enter]键,它就会崩溃。事实证明,我使用的是python

我正在写一个脚本,需要用户提供一些非常简单的输入,在做了这方面的研究后,我左右为难,试图找到最安全的方法

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

这主要起作用,但如果用户只按[enter]键,它就会崩溃。事实证明,我使用的是python<3,作者是为3+编写的。所以现在我必须重写2.7以满足我的需要。但是我如何编写它来满足任何一个平台的需要呢


我的建议是将Pi升级到Python 3。为两个不同的版本开发Python代码是没有意义的(除非它是一个库,您需要使用比共享函数更多的预防措施)。你可以做:

# Python 3.x
def getNumeric(prompt):
    while True:
        try:
            res = int(input(prompt))
            break
        except ValueError:
            print("Numbers only please!")
    return res

对于Python2.7.x,使用
raw\u input()
而不是
input()
input()不被视为保存,因为它会计算给定的字符串(可能是恶意的)。

尝试将“input(prompt)”更改为“raw_input(prompt)”。文本和数字效果很好,但在2.7(3未测试)中,如果用户在没有任何输入的情况下点击enter:
SyntaxError:解析时意外的EOF已修复(在2.7中)如果我使用
原始输入
。感谢命令
input()
在Python 2中不安全,因为它计算输入字符串。它还可以创建新程序或运行任何程序。这并不比访问控制台更糟糕,但不安全,例如,如果输入被远程重定向。输入的一个例子
\uuuuu import\uuuuu('os')。系统('sh')
@hynekcer Yea同意,我将改变这个(几乎)7年前的答案
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:"
# Python 3.x
def getNumeric(prompt):
    while True:
        try:
            res = int(input(prompt))
            break
        except ValueError:
            print("Numbers only please!")
    return res