我正在编写一个需要用户提供一些非常简单的输入的脚本,在对此进行研究时,我正陷入困境,试图找出最安全的方法。
我只想要一个整数,偶然发现(我认为是)一段很好的代码(从内存中执行此操作):
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)?
答案 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:"