在python中获取安全的用户输入
我正在写一个脚本,需要用户提供一些非常简单的输入,在做了这方面的研究后,我左右为难,试图找到最安全的方法 我只想要一个整数,然后偶然发现(我认为是)一段很好的代码,类似于(从内存中执行此操作): 这主要起作用,但如果用户只按[enter]键,它就会崩溃。事实证明,我使用的是python<3,作者是为3+编写的。所以现在我必须重写2.7以满足我的需要。但是我如何编写它来满足任何一个平台的需要呢在python中获取安全的用户输入,python,input,raspberry-pi,Python,Input,Raspberry Pi,我正在写一个脚本,需要用户提供一些非常简单的输入,在做了这方面的研究后,我左右为难,试图找到最安全的方法 我只想要一个整数,然后偶然发现(我认为是)一段很好的代码,类似于(从内存中执行此操作): 这主要起作用,但如果用户只按[enter]键,它就会崩溃。事实证明,我使用的是python
我的建议是将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()
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