我想简化测试和控制流程,以在对其运行str()或int()之前检查用户输入是否是正确的数据类型。
我已经解决了这个问题。这只是不完整的,可能效率不高。这实际上是我拥有的user_prompt函数内部的一个函数,这是“ form_check()”部分,这正是本主题所关注的部分,因此我将其余代码省去了。
# the following is run on input from the user = indata
# with a string telling the user what type of data to give = req
def form_check(req, indata):
if "int" in req:
req = "int"
if indata.isnumeric():
print(req)
return int(indata)
else:
exit(1)
elif "str" in req:
req = "str"
if indata.isalnum():
print(req)
return str(indata)
else:
exit(1)
elif "list" in req:
req = "list"
if indata.startswith("(") and indata.endswith(")"):
print(req)
return list(indata) # I know this isn't right but need to research; lists and dicts are new to me still
else:
exit(1)
else:
print("fail")
exit(1)
从我的输出中...
> USER: Prompting user for a number
Give input as integer
> 3243432
int
> USER: Prompting user for your name
Give input as string
> sdfsaf243
str
> USER: Prompting user for whatever
Give input as list
> (SDf)
list
3243432 sdfsaf243 ['(', 'S', 'D', 'f', ')']
从输出中可以看到,此代码通过并且没有错误,但仅开始解决我想做的事情。
答案 0 :(得分:0)
在这里只需要str,float和int。 input
始终返回一个字符串。因此,所有输入都可以通过拆分为字符变成一个列表。您可以将try / except用作int / float,并使用str
作为后备:
def form_check(req, data):
if req in (int, 'int'):
try:
return int(data)
except ValueError:
exit(1)
elif req in (float, 'float'):
try:
return float(data)
except ValueError:
exit(1)
return str(data)
但是,如果您为错误的输入而调用exit(1)
,则对用户提出诸如ValueError('input must be convertible to "int"')
之类的适当异常以使用户知道程序失败的原因对用户来说更有利。
如果您希望用户输入值列表,最好让他们输入用逗号分隔的值,然后返回:
[item.strip() for item in data.split(',')]