将字符串变量转换为其他类型

时间:2012-10-18 07:09:14

标签: python types casting python-2.7

我有一个类将变量作为字符串保存。 e.g。

x = "1"
y = "2.0"
z = "timedelta(seconds=10)"

如上所示,变量实际上是int / float / timedelta-types。 我需要用它们的真实类型返回这些变量。 (x应作为int返回,y应作为float返回,z应作为datetime.timedelta返回)

我正在考虑更改 getattr 并尝试在返回值之前找出类型,但是我做的小测试似乎不起作用:

from datetime import datetime, timedelta

def test():
    string = "timedelta(seconds=10)"
    x = eval(string)
    print x
    print type(x)
    if type(x) == 'datetime.timedelta':
        print "YES"
    else:
        print "NO"

输出结果为:

0:00:10
<type 'datetime.timedelta'>
NO

为什么if-case返回false?有没有更好的方法用真实类型返回这些变量?

5 个答案:

答案 0 :(得分:4)

因为type(x)返回type而不是字符串。而是使用:

type(x) == datetime.timedelta

# or, the better Python practice

isinstance(x, datetime.timedelta)

答案 1 :(得分:1)

您正在比较类型和字符串。试试这个:

>>> type(x) == timedelta
True

答案 2 :(得分:1)

您正在将字符串与类型进行比较,因此它返回false。

最好使用:

 isinstance(x, datetime.timedelta)

看到这段代码,它清楚地告诉你如何检查类型:

    >>> foo = {}

    >>> type(foo)
    <type 'dict'>

    >>> class MyDict(dict):
    ...     pass

    >>> bar = MyDict()

    >>> type(bar)
    <class '__main__.MyDict'>

    >>> type(bar) == dict
    False                     # Unexpected result

    >>> isinstance(bar, dict)
    True                      # Expected result

答案 3 :(得分:0)

'datetime.timedelta'的类型是str。我认为你的意思是做if type(x) == timedelta:,这将做正确的类型检查。

答案 4 :(得分:0)

简短回答(我认为这就是你想要的问题):

1.您导入 timedelta ,它的名称 timedelta ._ name _ 是一个字符串'timedelta'

2. x = eval(字符串),此处x 类型是您在上面导入的 timedelta

所以,这很简单,只需将类型(x)._ 名称 _ timedelta ._ 名称 _ 如果你只想将它们与字符串进行比较:)