본문 바로가기
컴퓨터/디버깅

'builtin_function_or_method' object is unsubscriptable

by adnoctum 2010. 12. 16.


   다음과 같은 에러가 났다.

TypeError: 'builtin_function_or_method' object is unsubscriptable


환경 : python 2.6.6 on Windows7.

전체 traceback 은 다음과 같다.

Traceback (most recent call last):
  File "CD57_scatter_plot.py", line 121, in <module>
    main();
  File "CD57_scatter_plot.py", line 117, in main
    process(f, module2customgene);
  File "CD57_scatter_plot.py", line 58, in process
    if module2customgene.has_key[all_module[0]] == True:
TypeError: 'builtin_function_or_method' object is unsubscriptable

에러 내용을 잘 살펴 보자. 'builtin_function_or_method' 객체는 subscriptable 하지 않다는 얘기. 즉, builtin_function_or_method 이란 이름의 객체는 [ ] 연산자를 이용할 수 없다는 의미이다. 그래서 최종적으로 나온 에러 메세지는 TypeError. [ ] 연산자가 사용될 수 없는 객체에 이 연산자를 사용하려 했기 때문에 객체의 type 이 맞지 않는다는 의미. 그러다면 왜 그럴까?

   아주 간단한데, 바로 앞 줄을 보자.
 
if module2customgene.has_key[all_module[0]] == True:

hash 인 module2customgene 객체의 함수인 has_key 함수를 부르려 하고 있다. 그런데 그 때 [ ] 연산자를 사용하고 있다. 즉, has_key 라는 builtin function 을 부르려는데 거기다 [ ] 연산자를 적용하려 했다. 그런데 built-in funciton 인 has_key 는 [ ] 연산자를 적용시킬 수 없는 type 이다. 그래서 에러가 난 것이고, 에러 메세지는 역시나 정확하다. 해결방법이고 자시고 오타를 수정하면 된다. >.<""

if module2customgene.has_key(all_module[0]) == True:


   파이썬은 객체의 타입이 없는 것 같지만 실은 있다. 단지 '늦게' 결정될 뿐이다. 난 이게 더 짜증나더군. 그래서 숫자이어야 하거나 문자이어야 하면 무조건 형변환을 시켜버린 후 작업한다. 문자였는지 뭐였는지 모르겠지만 하여튼 문자로 형변환, 이런 식으로.


'컴퓨터 > 디버깅' 카테고리의 다른 글

valgrind 를 이용한 메모리 관리  (1) 2011.03.03
정규표현식이 들어간 디버깅  (0) 2011.02.24
vector를 sort 한 이후 문제가 생길 때  (0) 2010.11.30
R 사용하기 (초보)  (0) 2010.10.21
segmentation fault의 원인  (1) 2010.09.30