获取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'>