더북(TheBook)

AttributeError

존재하지 않는 속성이나 메서드에 접근하는 경우에 발생한다. 철자를 확인하자! 존재하는 속성 목록을 얻기 위해 내장 함수 vars를 사용할 수 있다.

객체가 가리키는 AttributeErrorNoneType이라면 이는 None(없다)이라는 뜻이다. 따라서 문제는 속성 이름이 아니라 객체다.

객체가 없는 이유는 함수에서 값을 반환하는 것을 잊었기 때문일 수 있다. return 문을 만나지 않고 함수 끝까지 도달한다면 함수는 None을 반환한다. 흔히 발생하는 다른 원인으로는 sort 같은 리스트 메서드의 결과를 사용하지만, 해당 메서드가 None을 반환하는 경우다.

IndexError

리스트, 문자열, 튜플에 사용하는 인덱스가 길이 - 1보다 큰 경우다. 오류가 발생한 지점 바로 앞에 인덱스 값과 배열의 길이를 출력하는 print 문을 추가하자. 배열은 올바른 크기인가? 인덱스는 올바른 값인가?

파이썬 디버거(pdb)를 사용하면 오류가 발생한 바로 앞에서 프로그램의 상태를 조사할 수 있으므로 예외를 추적할 때 좋다. pdb에 대해서는 https://docs.python.org/3/library/pdb.html를 참조하자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.