6

所以,我需要将一个值转换为给定的类型:

if 'int' == type_name:
    value = int(value)
elif 'str' == type_name:
    value = str(value)
...

一般有没有办法做到这一点?例如:

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

这只是一个玩具解析器。不要在生产中使用!

4

3 回答 3

7

建立一个字典

TYPES = {
  'int' : int,
  'str' : str,
...
}

value = TYPES[type_name](value)
于 2012-08-29T13:08:02.627 回答
7

如果您只需要__builtins__类型,您可以这样做

value = getattr(__builtins__, type_name)(value)
于 2012-08-29T13:09:44.217 回答
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 中找到类型名称,以及它是否是有效的类型对象,如果是,则尝试对其进行强制转换操作。

于 2017-11-15T14:02:25.303 回答