获取python中存储在字符串中的数据类型

获取python中存储在字符串中的数据类型,python,Python,有没有办法了解字符串所包含的数据类型。。。这个问题没有什么逻辑性,但请参见下面的案例 varname = '444' somefunc(varname) => int varname = 'somestring' somefunc(varname) => String varname = '1.2323' somefunc(varname) => float 我的情况是: 我在列表中得到一个混合数据,但它们是字符串格式的 myList = ['1', '2', '1.2'

有没有办法了解字符串所包含的数据类型。。。这个问题没有什么逻辑性,但请参见下面的案例

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

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

varname = '1.2323'
somefunc(varname) => float
我的情况是: 我在列表中得到一个混合数据,但它们是字符串格式的

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

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

您可以使用ast.literal\u eval()和type()


我会按照正确的顺序尝试不同的类型:

>>> 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'>
def检测: ... 尝试: ... 返回类型(整数) ... 除了(TypeError、ValueError): ... 通过 ... 尝试: ... 返回类型(浮动) ... 除了(TypeError、ValueError): ... 通过 ... 返回类型 ... >>>检测('3') >>>检测('3.4') >>>检测('foo') 输出



我尝试了type(eval('123'))=>int,但是type(eval('somename'))将失败,因为它无法计算。。。如果有一个名为someName的变量,那么也会出现错误。如果只有一些类型需要测试,比如基本数据类型和字符串,那么是(只要尝试转换它们)。否则,不可以。你真的应该编辑你的作品而不是评论it@JonClements:大多数
eval
调用本质上是非常危险的,不是吗?它仅限于某些基本类型,不会执行-因此除了不做任何不愉快的事情外,它也会执行。在op的情况下,这将是一个未知类型,或者该值保留为。Strings将适用于大多数“基本”类型。不适用于任何更复杂的操作,例如尝试获取恰好是函数对象(如lambda)的变量类型。警告:您必须在
float
之前执行
int
,否则您可以执行
float(1)
,这样就可以了。很高兴为您提供帮助,Prasath。和佩雷尔的答案差不多。
>>> 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'>
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'>