在Python中,给定字符串'int'
,我如何获得类型 int
?使用getattr(current_module, 'int')
不起作用。
答案 0 :(得分:6)
int
不是当前模块命名空间的一部分;它是__builtins__
命名空间的一部分。因此,您可以在getattr
上运行__builtins__
。
要验证它是一种类型,您只需检查它是否是type
的实例,因为所有类型都是从它派生的。
>>> getattr(__builtins__, 'int')
<type 'int'>
>>> foo = getattr(__builtins__, 'int')
>>> isinstance(foo, type)
True
答案 1 :(得分:4)
通过这种方式,如果您期望一组有限的类型,您应该使用字典将名称映射到实际类型。
type_dict = {
'int': int,
'str': str,
'list': list
}
>>> type_dict['int']('5')
5
答案 2 :(得分:1)
尝试使用eval()
:
>>>eval('int')
<type 'int'>
但要确保你给eval()
的内容;这可能很危险。
答案 3 :(得分:1)
如果您不想使用eval
,您只需在dict中存储从字符串到类型的映射,然后查找:
>>> typemap = dict()
>>> for type in (int, float, complex): typemap[type.__name__] = type
...
>>> user_input = raw_input().strip()
int
>>> typemap.get(user_input)
<type 'int'>
>>> user_input = raw_input().strip()
monkey-butter
>>> typemap.get(user_input)
>>>