在Python中找到适合字符串的最佳类型

时间:2015-10-23 10:08:17

标签: python types casting

我有一个字符串变量,我想找到哪个内置类型最好地描述了这个变量的值。例如:"3.14" - >浮动; "2015-10-23" - >日期;别的 - >串

现在我只是简单地尝试和排除,这有点难看:

try:
    float(value)
    return "This is a float"
except ValueError:
    try:
        dateutil.parser.parse(value)
        return "Date"
    except ValueError:
        pass
return "This is a string"

任何关于" pythonic"的想法这样做的方法?

3 个答案:

答案 0 :(得分:3)

您可以遍历解析尝试:

def what_is(value):
    for attempt, type_ in ((float, "This is a float"), 
                           (dateutil.parser.parse, "Date")):
        try:
            _ = attempt(value)
        except ValueError:
            continue
        return type_
    return "This is a string"

这可以轻松扩展到更多解析器,并且最终会回到字符串。

答案 1 :(得分:0)

保留list个强制转换/解析函数,然后逐个试用:

>>> value = '1.2'
>>> answer = None
>>> casts = [int, float, dateutil.parser.parse]
>>> for c in casts:
...     try:
...         answer = c(value)
...     except ValueError:
...         pass
...     else:
...         break
...
>>> answer
1.2

添加与您正在检查的类型相关的任何异常类型。

答案 2 :(得分:0)

我的解决方案不同。假设我想找到最合适的类型并且我可以让python决定什么是顺序,我可以简单地使用eval

value = '1.2'
try:
    result = eval(value)
except ValueError:
    result = value
type(result)