5

有什么方法可以理解字符串包含什么数据类型...这个问题逻辑不大,但请参见以下案例

varname = '444'
somefunc(varname) => int

varname = 'somestring'
somefunc(varname) => String

varname = '1.2323'
somefunc(varname) => float

我的案例:我在列表中得到混合数据,但它们是字符串格式。

myList = ['1', '2', '1.2', 'string']

我正在寻找一种通用的方法来了解他们的数据,以便我可以添加相应的比较。由于它们已经转换为字符串格式,我不能真正将列表(myList)称为混合数据......但还有办法吗?

4

3 回答 3

15
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'>
于 2013-07-12T22:04:14.293 回答
8

您可以使用 ast.literal_eval() 和 type():

import ast
stringy_value = '333'
try:
    the_type = type(ast.literal_eval(stringy_value))
except:
    the_type = type('string')
于 2013-07-12T22:01:23.093 回答
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'>
于 2013-07-12T22:02:35.947 回答