いくつかの変数を文字列として保持するクラスがあります。例えば
x = "1"
y = "2.0"
z = "timedelta(seconds=10)"
上記でわかるように、変数は実際には int/float/timedelta 型です。これらの変数を実際の型で返す必要があります。(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 を返すのはなぜですか? これらの変数を実際の型で返すより良い方法はありますか?