상세 컨텐츠

본문 제목

[Python] 파이썬 에러 메시지 (Error messages) 총정리

IT & Programming/파이썬 (Python) 공부

by 그림아이 2023. 4. 2. 02:00

본문

반응형

 

프로그램 언어를 공부하다 보면 결국 프로그램 언어는 수많은 에러와의 싸움이라는 것을 알게 됩니다. 코드 하나를 완성하는데 있어 최소 수십 번의 디코딩과 에러 메시지들을 경험해야 하고, 그 문제들을 하나씩 해결해나가는 과정이 녹록치 않습니다.

 

직업이 개발자가 아니라면 매번 만나는 에러 메시지인데도 잘 외워지지도 않고 기억이 잘 안나는 것이 보통입니다. 매우 정상이니 자신의 나이나 뇌의 용량을 탓하지 마시길 바랍니다. 우리에겐 구글이 있으니까요. 모르면 그냥 찾아보면 됩니다. 저처럼 꼼꼼한 사람들이 정리 잘 해두고 공유하고 있으니 찾는 것만 잘해도 되는 세상입니다.

 

저도 누군가에게 도움을 받아 파이썬을 독학했으니, 저도 누군가를 위해 도움을 주어야 한다는 의무감에 정리해봅니다.파이썬으로 코딩하면서 에러와 힘든 씨름을 하고 계신 모든 분들께 에러 메시지들을 총정리 해드립니다. 모든 에러 메시지들이 나열된 것은 아닐 수는 있으나, 웬만한 에러 메시지들은 다 있으니 참고하시기 바랍니다.

 

아래 에러 메시지들은 모두 파이썬의 주요 “내장 예외 (built-in exceptions)” 입니다.

 

Exception Description
AssertionError 가정 설정문의 오류로 발생
AttributeError 속성 오류, 속성 이름이 잘못된 경우 흔히 발생
EOFError input() 함수가 데이터를 읽지 못한 상태에서 EOF (end-of-file) 조건을 만날 때 발생합니다.
FloatingPointError 현재 사용되지 않습니다. 최신 버전에서는 사라졌습니다.
GeneratorExit 제너레이터가 닫힐 때 발생합니다; generator.close()와 coroutine.close()에서 발생하고 기술적인 에러는 아닙니다.
ImportError import 문이 모듈을 로드하는 데 문제가 있을 때 발생합니다. 또한 from ... import 에서 임포트 하려는 이름을 찾을 수 없을 때도 발생합니다.
ModuleNotFoundError ImportError 의 서브 클래스인데, 모듈을 찾을 수 없을 때 import 가 일으킵니다.
IndexError 시퀀스 인덱스가 범위를 벗어날 때 발생합니다. (슬라이스 인덱스는 허용된 범위 내에 들어가도록 자동으로 잘립니다; 인덱스가 정수가 아니면 TypeError 가 발생합니다.)
KeyError 매핑 (딕셔너리) 키가 기존 키 집합에서 발견되지 않을 때 발생합니다.
KeyboardInterrupt 사용자가 인터럽트 키(일반적으로 Control-C 또는Delete)를 누를 때 발생합니다.
MemoryError 작업에 메모리가 부족하지만, 상황이 여전히 (일부 객체를 삭제해서) 복구될 수 있는 경우 발생합니다.
NameError 지역 또는 전역 이름을 찾을 수 없을 때 발생합니다. 이는 정규화되지 않은 이름에만 적용됩니다. 연관된 값은 찾을 수 없는 이름을 포함하는 에러 메시지입니다.
NotImplementedError 이 예외는 RuntimeError 에서 파생됩니다. 사용자 정의 베이스 클래스에서, 파생 클래스가 재정의하도록 요구하는 추상 메서드나, 클래스가 개발되는 도중에 실제 구현이 추가될 필요가 있음을 나타낼 때 이 예외를 발생시켜야 합니다.
(※ 정의는 이렇게 써 있지만 무슨 말인지 저도 모르겠습니다. 저도 본 적이 없는 메시지입니다. 아마 클래스까지 개발하시는 고급 개발자들만 이해하실 것 같습니다.)
OSError 시스템 함수가 시스템 관련 에러를 돌려줄 때 발생하는데, “파일을 찾을 수 없습니다(file not found)” 나 “디스크가 꽉 찼습니다(disk full)” 와 같은 (잘못된 인자형이나 다른 부수적인 에러가 아닌) 입출력 실패를 포함합니다.
OverflowError 산술 연산의 결과가 너무 커서 표현할 수 없을 때 발생합니다.
ReferenceError weakref.proxy() 함수가 만든 약한 참조 프락시가 이미 가비지 수집된 참조 대상의 어트리뷰트를 액세스하는 데 사용될 때 발생합니다.
(※ 정의는 이렇게 써 있지만 무슨 말인지 저도 모르겠습니다. 저도 본 적이 없는 메시지입니다. 아마 고급 개발자들만 이해하실 것 같습니다. 저처럼 취미로 공부하는 사람들에게는 생소한 메시지입니다.)
RuntimeError 다른 범주에 속하지 않는 에러가 감지될 때 발생합니다. 연관된 값은 정확히 무엇이 잘못되었는지를 나타내는 문자열입니다.
StopIteration 이터레이터에 의해 생성된 항목이 더 없다는 것을 알려주기 위해, 내장 함수 next()와 이터레이터의__next__() 메서드가 일으킵니다..
SyntaxError 문법 오류가 발생할 때 파서 (parser)가 출력하는 메시지입니다.
IndentationError 잘못된 들여쓰기와 관련된 문법 오류의 베이스 클래스입니다.
TabError 들여쓰기가 일관성없는 탭과 스페이스 사용을 포함하는 경우 발생합니다.
SystemError 인터프리터가 내부 에러를 발견했지만, 모든 희망을 포기할 만큼 상황이 심각해 보이지는 않을 때 발생합니다.
SystemExit sys.exit() 함수가 일으킵니다.
TypeError 연산이나 함수가 부적절한 유형의 객체에 적용될 때 발생합니다. 연관된 값은 형 불일치에 대한 세부 정보를 제공하는 문자열입니다.
UnboundLocalError 함수 나 메서드에서 지역 변수를 참조하지만, 해당 변수에 값이 연결되지 않으면 발생합니다.
UnicodeError 유니코드 관련 인코딩 또는 디코딩 에러가 일어날 때 발생합니다.
UnicodeEncodeError 인코딩 중에 유니코드 관련 에러가 일어나면 발생합니다.
UnicodeDecodeError 디코딩 중에 유니코드 관련 에러가 일어나면 발생합니다.
UnicodeTranslateError 번역 중에 유니코드 관련 에러가 일어나면 발생합니다.
ValueError 연산이나 함수가 올바른 형이지만 부적절한 값을 가진 인자를 받았고, 상황이 IndexError 처럼 더 구체적인 예외로 설명되지 않는 경우 발생합니다.
ZeroDivisionError 나누기 또는 모듈로 연산의 두 번째 인자가 0일 때 발생합니다.

 

반응형

 

대표적인 에러 메시지들이 발생하는 경우의 실제 사례들을 살펴보겠습니다. 공부하실 때 유용하게 참고하시기 바랍니다.

 

IndexError

>>> L1=[1,2,3]

>>> L1[3]

Traceback (most recent call last):

File "<pyshell#18>", line 1, in<module>

L1[3]

IndexError: list index out of range

 

ModuleNotFoundError

>>> import notamodule

Traceback (most recent call last):

File "<pyshell#10>", line 1, in<module>

import notamodule

ModuleNotFoundError: No module named 'notamodule'

 

KeyError

>>> D1={'1':"aa", '2':"bb", '3':"cc"}

>>> D1['4']

Traceback (most recent call last):

File "<pyshell#15>", line 1, in<module>

D1['4']

KeyError: '4'

 

ImportError

>>> from math import cube

Traceback (most recent call last):

File "<pyshell#16>", line 1, in<module>

from math import cube

ImportError: cannot import name'cube'

 

StopIteration

>>> it=iter([1,2,3])

>>> next(it)

1

>>> next(it)

2

>>> next(it)

3

>>> next(it)

Traceback (most recent call last):

File "<pyshell#23>", line 1, in<module>

next(it)

StopIteration

 

TypeError

>>> '2'+2

Traceback (most recent call last):

File "<pyshell#23>", line 1, in<module>

'2'+2

TypeError: must be str, not int

 

ValueError

>>> int('xyz')

Traceback (most recent call last):

File "<pyshell#14>", line 1, in<module>

int('xyz')

ValueError: invalid literal for int()with base 10: 'xyz'

 

NameError

>>> age

Traceback (most recent call last):

File "<pyshell#6>", line 1, in<module>

age

NameError: name 'age' is notdefined

 

ZeroDivisionError

>>> x=100/0

Traceback (most recent call last):

File "<pyshell#8>", line 1, in<module>

x=100/0

ZeroDivisionError: division by zero

 

KeyboardInterrupt

>>> name=input('enter your name')

enter your name^c

Traceback (most recent call last):

File "<pyshell#9>", line 1, in<module>

name=input('enter your name')

KeyboardInterrupt

 

 

파이썬 공부하시면서 에러와 힘겹게 싸우고 계시는 모든 분들 행복한 프로그래밍 되시길 희망합니다.

 

 

 

728x90
반응형

관련글 더보기

댓글 영역