有没有办法了解字符串所包含的数据类型...这个问题没有什么逻辑但是看下面的情况
varname = '444'
somefunc(varname) => int
varname = 'somestring'
somefunc(varname) => String
varname = '1.2323'
somefunc(varname) => float
我的案例: 我在列表中得到了混合数据,但它们是字符串格式。
myList = ['1', '2', '1.2', 'string']
我正在寻找一种通用的方法来了解他们的数据是什么,以便我可以添加各自的比较。由于他们已经转换为字符串格式,我真的不能将列表(myList)称为混合数据......但仍然有办法吗?
答案 0 :(得分:14)
from ast import literal_eval
def str_to_type(s):
try:
k=literal_eval(s)
return type(k)
except:
return type(s)
l = ['444', '1.2', 'foo', '[1,2]', '[1']
for v in l:
print str_to_type(v)
输出
<type 'int'>
<type 'float'>
<type 'str'>
<type 'list'>
<type 'str'>
答案 1 :(得分:8)
您可以使用ast.literal_eval()和type():
import ast
stringy_value = '333'
try:
the_type = type(ast.literal_eval(stringy_value))
except:
the_type = type('string')
答案 2 :(得分:1)
我会按正确的顺序尝试不同的类型:
>>> def detect(s):
... try:
... return type(int(s))
... except (TypeError, ValueError):
... pass
... try:
... return type(float(s))
... except (TypeError, ValueError):
... pass
... return type(s)
...
>>> detect('3')
<type 'int'>
>>> detect('3.4')
<type 'float'>
>>> detect('foo')
<type 'str'>