在保持类型的同时从python获取数字作为输入的最佳方法是什么

Fin*_*inn 1 python shell input command-line-interface

我正在尝试从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: ")
Run Code Online (Sandbox Code Playgroud)

显然这不是最好的方法.

HYR*_*YRY 8

使用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")
Run Code Online (Sandbox Code Playgroud)