파이썬 에러 TOP 7 (오류 메시지 종류와 해결 방법)

‘분명히 하라는 대로 똑같이 코드를 받아 적었는데…’ 갑자기 에러 메시지를 맞닥뜨리는 상황, 누구나 겪어 봤을 거예요. 실습하다가 에러가 발생하면 도대체 무엇이 문제인지 몰라 당황스럽기 마련입니다. 영어로 길게 쓰여 있는 탓에 프로그래밍이 익숙하지 않은 초심자들에게는 다소 무섭게 느껴질 수 있어요. 하지만 에러 메시지에는 많은 정보가 담겨 있고 생각보다 친절하기 때문에, 겁먹지 말고 차근차근 뜯어보면 에러를 해결할 수 있습니다.

Codeit
2024.08.23

코딩 지식, 한 단계 더 올려볼까요?

코드잇 강의로 더 깊이 
있는 학습을 시작하세요.

코딩에 처음 입문할 때 가장 대중적으로 선택하는 프로그래밍 언어인 파이썬. 문법이 간결하고 배우기 쉽다는 장점 덕분에 파이썬이 다른 언어에 비해 상대적으로 진입장벽이 낮은 것은 사실입니다. 하지만 아무리 쉽다고 하더라도 프로그래밍 지식이 전혀 없는 사람이 새로운 언어를 배울 때면 시행착오를 거칠 수밖에 없어요.

1

'분명히 하라는 대로 똑같이 코드를 받아 적었는데…' 갑자기 에러 메시지를 맞닥뜨리는 상황, 누구나 겪어 봤을 거예요. 실습하다가 에러가 발생하면 도대체 무엇이 문제인지 몰라 당황스럽기 마련입니다. 영어로 길게 쓰여 있는 탓에 프로그래밍이 익숙하지 않은 초심자들에게는 다소 무섭게 느껴질 수 있어요. 하지만 에러 메시지에는 많은 정보가 담겨 있고 생각보다 친절하기 때문에, 겁먹지 말고 차근차근 뜯어보면 에러를 해결할 수 있습니다.

<파이썬 에러 예시>

Traceback (most recent call last): File "codeit.py", line 12, in <module> numbers[right] = temp[left] TypeError: 'int' object is not subscriptable # 에러의 종류 : 에러에 대한 세부 정보

파이썬 에러 메시지는 위와 같은 구조로 이루어져 있습니다. Traceback은 파이썬 프로그램 실행 중에 발생한 에러를 추적해주는 모듈로, 코드가 잘못 작성 되었을 경우 Traceback을 먼저 출력하고 이어서 에러에 대한 세부적인 정보를 콘솔에 띄워줍니다. 에러 메시지를 읽을 때는 밑에서부터 읽으면 해석하기 쉬운데요. 가장 아랫줄에서 어떤 종류의 에러가 발생했는지 알려주기 때문입니다.

그렇다면 파이썬에는 어떤 종류의 에러가 있을까요? 코드잇 커뮤니티에서 수강생들이 가장 많이 질문한 에러 TOP7을 지금 바로 알아봅시다.

<코드잇 커뮤니티 질문 중 파이썬 에러 관련 질문 비율> 2


TypeError

TypeError는 파이썬 코드를 작성하다 보면 가장 흔히 만나게 되는 에러로 데이터 타입과 관련된 에러입니다. 잘못된 데이터의 유형이 연산이나 함수에 적용될 때 발생합니다. TypeError에 뒤이어 나오는 내용은 어떤 유형이 불일치하는지에 대한 세부 정보를 제공해줍니다.

예) TypeError: 'int' object is not subscriptable 정수형을 인덱싱 할 수 없다는 의미. 리스트나 문자열이 아닌 정수형을 인덱싱하려고 할 때 발생.

TypeError: 'float' object cannot be interpreted as an integer 'float' 는 정수로 인식될 수 없다는 의미. 꼭 정수형을 넘겨줘야되는 파라미터에 실수형을 넘겨주면 발생. 주로 range 함수 내에 정수형(int)이 아닌 실수형(float)를 입력하면 만나게 되는 에러.

TypeError: list indices must be integers or slices, not str 리스트의 인덱스는 문자형이 아니라 정수형이나 슬라이스(범위)여야 한다는 의미. 파이썬의 리스트를 인덱싱할 때 정수가 아닌 문자열로 인덱싱할 때 발생.

SyntaxError

SyntaxError는 프로그램 구문이 잘못 쓰였을 경우 발생하는 에러로, 주로 철자가 정확하지 않거나 따옴표, 괄호, 콜론 등을 빠뜨렸을 때 발생합니다.

예) SyntaxError: invalid syntax 파이썬에서 쓰지 않는 문법이라는 의미. 문법적인 에러가 있을 때 발생.

SyntaxError: EOL while scanning string literal 문자열을 스캔하던 도중 '라인이 끝나버렸다(EOL=End of Line)'는 의미. 따옴표가 누락되었을 경우 발생.

IndexError

IndexError는 리스트의 범위를 벗어난 인덱스에 접근하려 하는 경우 발생하는 에러입니다. 해당 에러를 만났을 때는 리스트의 사이즈 얼마인지, 접근하려고 한 인덱스가 리스트의 사이즈보다 크지 않은지 확인해보면 좋습니다.

예) IndexError: list index out of range 리스트의 인덱스가 범위를 벗어났다는 의미.

NameError

NameError는 사용하려는 로컬 또는 글로벌 변수의 이름을 찾을 수 없을 때 발생하는 에러입니다. NameError에 뒤이어 나오는 내용은 찾을 수 없는 이름이 무엇인지 알려줍니다. 해당 에러를 만났을 때는 변수의 이름이 제대로 지정되었는지 확인해야 합니다. 주로 들여쓰기를 제대로 하지 않아서 발생하는 경우가 많습니다.

예) NameError: name 'codeit' is not defined 'codeit'이라는 이름의 변수가 정의되지 않았다는 의미. 변수가 제대로 선언되었는지 확인 필요.

AttributeError

AttributeError는 속성 참조 또는 할당이 실패하면 발생하는 에러입니다. NameError 와 유사하게 속성의 이름을 잘못 썼을 때 발생하는 경우가 많습니다.

예) AttributeError: module '' has no attribute '' Import한 모듈의 명령어를 잘못 입력했다는 의미. 모듈의 속성 이름이 잘못되지 않았는지 확인.

ValueError

ValueError는 함수가 받은 파라미터가 올바른 자료형이나, 부적절한 값일 때 발생합니다.

예) ValueError: min() arg is an empty sequence ValueError: max() arg is an empty sequence min() 함수나 max()함수의 인자로 빈 리스트를 제공해줬다는 의미.

ValueError: invalid literal for int() with 정수, 소수, 문자열 등 다른 자료형 사이에서 값을 변환할 때 변환이 불가능하면 발생. 예를 들어, a = int("codeit")와 같은 문장은 문자열 codeit을 정수로 변환할 수 없으므로 에러가 발생.

ImportError

ImportError는 Import 문에서 모듈을 로드하는 과정에서 문제가 있을 때 발생하는 에러입니다. 주로 파일명이 모듈명과 동일하여 발생하는 경우가 많습니다.

예) ImportError: attempted relative import with no known parent package 상위 패키지의 위치를 알 수 없다는 의미.

참고) ModulenotfoundError

ModulenotfoundError는 ImportError의 하위 클래스로 모듈을 찾을 수 없을 때 발생하는 에러입니다. 실전 프로젝트를 진행할 때 종종 만나게 되는 에러입니다.

예) ModuleNotFoundError: No module named 'module_name' 'module_name'이라는 모듈을 찾을 수 없다는 의미.


파이썬 기초 원리부터 제대로 배우고 싶다면?
자주 만나게 되는 에러의 종류 몇 가지만 제대로 알아둔다면, 앞으로 더 이상 당황하지 않고 스스로 해결할 수 있게 될 거예요. 여전히 혼자 파이썬 공부하다가 막막하다면? 기초 원리와 개념부터 차근차근 제대로 배울 수 있는 코드잇 로드맵으로 시작하세요. 누구나 쉽고 재미있게 파이썬이라는 언어를 배우고 코딩에 대한 두려움을 떨쳐버릴 수 있을 거예요.

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇