所以,我需要将值转换为给定的类型:
if 'int' == type_name:
value = int(value)
elif 'str' == type_name:
value = str(value)
...
有没有办法一般地做到这一点? E.g:
type_instance = get_type_instance(type_name)
value = type_instance(value)
我正在使用Python 2.7,但也会对Python 3.X解决方案感兴趣。
更新
这是我正在使用的解决方案:
class Token:
def __init__(self, type_name, value):
self.type = type_name
self.value = __builtins__[type_name](value) # not safe
这只是一个玩具解析器。 不要在生产中使用!
答案 0 :(得分:6)
建立一个字典
TYPES = {
'int' : int,
'str' : str,
...
}
value = TYPES[type_name](value)
答案 1 :(得分:6)
如果您只需要__builtins__
种类型,则可以
value = getattr(__builtins__, type_name)(value)
答案 2 :(得分:0)
由于您在问题的早期版本中指定了float64
,我认为您也对获取numpy类型感兴趣。如果是这样,以下函数应解决此问题:
def can_typecast(type, value):
try:
tp = getattr(__builtins__, type)
except AttributeError:
try:
np = __import__('numpy')
tp = getattr(np, type)
if not isinstance(tp, type):
raise ValueError('type string is not a type')
except AttributeError:
raise ValueError('Invalid type specified')
except ImportError:
raise ValueError('Numpy not found')
try:
tp(value)
except ValueError:
return False
return True
这样做首先要查看给定的类型名称是否可以解析为内置类型。如果失败,它会查看是否可以在numpy 和中找到类型名称,如果它是有效的类型对象,如果是,则尝试对其进行强制转换操作。