我正在尝试从 python 获取一个数字作为 CLI 输入。有效输入应该是 int 或 float,我需要维护类型。所以验证一个 int 并返回一个 float 是行不通的。
这是我能想到的最好的东西,但并不是那么好。
def is_valid(n):
try:
if '.' in n: return float(n)
return int(n)
except ValueError:
print "try again"
def num_input(s):
n = raw_input(s)
while is_valid(n) is None:
n = raw_input(s)
return is_valid(n)
valid_num = num_input("Enter a valid number: ")
显然这不是最好的方法。
请您参考如下方法:
使用for循环尝试所有的转换,我添加了复杂类型来演示:
def is_valid(n):
for t in (int, float, complex):
try:
return t(n)
except ValueError:
pass
raise ValueError("invalid number %s" % n)
print is_valid("10")
print is_valid("10.0")
print is_valid("1+3.0j")
