我有一个字符串变量,我想找到哪个内置类型最好地描述了这个变量的值。例如:"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"的想法这样做的方法?
答案 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)