다음과 같은 에러가 났다.
TypeError: 'builtin_function_or_method' object is unsubscriptable
전체 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
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 |