2014-01-15 3 views
0

나는 이와 비슷한 코드를 가지고있다. MyModule.py함수를 동적으로 호출 할 때 왜 TypeError가 발생합니까?

에서
class SomeClass: 
    @classmethod 
    def SomeMethod(cls, a, b, c): 
     return "foo" 

가 그럼 난 또 다른 파이썬 파일이 있습니다

cls = getattr(MyModule, "SomeClass") 
method = getattr(cls, "SomeMethod") 
args = { "a":1, "b": 2, "c": 3 } 
res = method(**args) 
print "Result: " + res 
print "Result type: " + str(type(res)) 

을하지만) (행 호출 유형에 다음과 같은 오류가 발생합니다 :

TypeError: 'unicode' object is not callable 

일을 복잡하게하기 위해, 이 축소 된 예제에서는 오류가 발생하지 않습니다. 이 디버깅 방법에 대한 아이디어가 있습니까? 그런 에러를 어떻게 발생시킬 수 있습니까?

+2

아마도'type'이라는 변수가 있습니까? – jgritty

+1

@jgritty 또는'str' – goncalopp

+2

'str' 또는'type'에 무엇인가 할당 했습니까? 'repr (str)'과'repr (type)'은 무엇을 제공합니까? –

답변

1

유니 코드 값에 바인딩 된 str 또는 type (또는 둘 다) 로컬 변수가 있습니다. 변수를 제거하면 해당 변수가 내장 된 호출 가능 함수를 마스킹합니다.

del str 또는 del type을 사용하여 해당 참조를 제거하면 다시 사용할 수 있습니다.

또는 사용 :

import __builtin__ 

print "Result type: " + __builtin__.str(__builtin__.type(res)) 

는 내장 기능을 대신 사용하는 절대적으로 확신 할 수 있습니다.

+0

그게 사실 이었어. 유형이라는 변수가 있습니다. –

관련 문제