2011-09-13 7 views

답변

6

int가의 일부가 아닙니다 현재 모듈의 네임 스페이스. 그것은 __builtins__ 네임 스페이스의 일부입니다. 따라서 getattr__builtins__에 게시합니다.

유형이 맞는지 확인하려면 유형이 type인지 여부 만 확인하면됩니다. 모든 유형은이 유형에서 파생되기 때문입니다.

>>> getattr(__builtins__, 'int') 
<type 'int'> 
>>> foo = getattr(__builtins__, 'int') 
>>> isinstance(foo, type) 
True 
1

시도 :

>>>eval('int') 
<type 'int'> 

하지만 eval()에게 줄 것을 확신 할; 그것은 위험 할 수 있습니다.

+0

문자열은 _ 유형이어야하지만이를 보장 할 수는 없습니다. 문자열로 내장 타입을 얻을 수있는 다른 방법이 없습니까? –

4

제한된 유형의 집합이 필요하다면 사전을 사용하여 이름을 실제 유형에 매핑해야합니다.

type_dict = { 
    'int': int, 
    'str': str, 
    'list': list 
} 

>>> type_dict['int']('5') 
5 
+0

"28 초 전 답변"? 좋아. 나는'.get'을 사용하기 때문에 내 대답을 떠난다. *** *** 불평하기 *** –

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) 
>>> 
관련 문제