我有一个类将变量作为字符串保存。 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?有没有更好的方法用真实类型返回这些变量?
答案 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 ._ 名称 _ 进行比较strong>如果你只想将它们与字符串进行比较:)