重复请求用户正确输入的最佳方式是什么?
例如,我想继续检查a
值是否为int
,当它最终说ok时,您选择了数字。
我被困在这里:
try:
a = int(input())
except:
print("incorrect pick a number and try again")
#Somewhere here
print("Ok thanks you finally picked a number")
如果int
无法将其参数转换为整数,则您想要捕获的唯一异常是它引发的ValueError
。try
语句将处于一个循环中,如果没有获得异常,则将显式中断该循环。
while True:
response = input()
try:
a = int(response)
except ValueError:
print("incorrect pick a number and try again")
else:
print("Ok thanks you finally picked a number")
break
如果你想/必须参与这段代码,我认为唯一的方法是使用循环。
while True:
try:
a = int(input('Insert a number:'))
print ('Your number is {}'.format(a))
break
except ValueError:
print("incorrect pick a number and try again")
因此,如果用户插入一个整数,代码将打印数字并中断循环,否则将重复请求。我希望它对你有用!
你可以这样做:
a = None
while type(a) != int:
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")
本质上:
- 用
NoneType
创建一个变量,这样当您第一次运行程序时,它就可以访问while循环,因为条件苛刻 - 循环,直到该变量的类型不是
int
- 请求用户输入并尝试转换为整数,如果失败,请打印错误并重试
- 当输入为整数类型时,它将退出循环并打印最终消息
您可以使用type()
或isinstance()
进行检查,但正如@chepner所建议的,避免使用type
,因为它只是返回对象的类型,而如果对象参数是classinfo参数或其(直接、间接或虚拟(子类的实例,则isinstance()
返回true
。
帮助您理解:
class foo:
pass
class bar(foo):
pass
isinstance(foo(), foo) # returns True
type(foo()) == foo # returns True
isinstance(bar(), foo) # returns True
type(bar()) == foo # returns False,and this probably won't be what you want.
如果您想使用isinstance()
,代码将显示为:
a = None
while not isinstance(a, int):
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")
正如@L3viathan所指出的,你也可以做:
a = None
while a is None:
try:
a = int(input())
except:
print("incorrect pick a number and try again")
print("Ok thanks you finally picked a number")
在这种情况下,循环直到a
得到一个值,只有在没有抛出异常的情况下才会这样做。
while True:
try:
number=int(input("Enter a number: "))
except:
print("incorrect pick a number and try again")
else:
print("ok Thanks you finally picked a number ")
break