본문 바로가기
Python

[파이썬] 파이썬 에러 종류 9가지

by 메이플 🍁 2022. 3. 23.

⚠️ 이 포스팅은 인프런님의 프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)을 공부하고 정리한 블로그 포스팅입니다. ⚠️

 

포스팅에 해당하는 목차는 다음과 같습니다:
섹션 7. 파이썬 예외처리

  • Exception(1-1)
  • Exception(1-2)

 


 

파이썬 에러 종류

파이썬에서는 프로그램이 잘못 동작하는것을 막기 위해 에러메세지를 사용자에게 표시해준다. 아래는 우리가 흔히 볼 수 있는 파이썬 에러 종류다.

  1. SyntaxError: 파이썬 문법을 지키지 않았을때 발생하는 에러
  2. NameError: 참조할 이름이 없을때 발생하는 에러
  3. ZeroDivisionError: 어떤수를 0으로 나누려고할때 발생하는 에러
  4. IndexError: 인덱스의 범위를 초과했을때 발생하는 에러
  5. KeyError: 딕셔너리형 데이터 안에 있는 key에서 발생하는 에러
  6. AttributeError: 어떤 모듈에 존재하지 않는 속성을 사용할때 발생하는 에러
  7. ValueError: 참조하려는 값이 존재하지 않을때 발생하는 에러
  8. FileNotFoundError: 해당하는 파일을 찾지 못했을때 발생하는 에러
  9. TypeError: 자료형에 맞지 않는 연산을 수행하는 경우 발생하는 에러

 

1. SyntaxError

Syntax Error는 파이썬 문법을 지키지 않았을때 발생하는 에러다. 아래의 코드는 print함수에서 문자열을 출력할때 작은따옴표로 닫아주지 않아서 문법적인 오류 즉 Syntax Error가 발생하였다

print('this is syntax error)
# SyntaxError: unterminated string literal (detected at line 1)

아래의 코드는 if 문에서 ':'을 사용하지 않아서 Syntax Error 메세지가 발생했다.

if True
  pass
# SyntaxError: expected ':'

 

2. NameError

Name Error는 참조할 이름이 없을때 발생하는 에러다. 아래의 코드에서 선언되지 않은 c를 print 함수로 출력하려고 하기 때문에 참조할 이름이 없어 Name Error라는 오류 메세지가 발생했다.

a = 1
b = 2
print(c)
# NameError: name 'c' is not defined

 

3. ZeroDivisionError

파이썬에서는 어떤수를 0으로 나누려고할때 ZeroDivisionError라는 에러 메세지가 발생한다. 아래의 코드는 100이라는 숫자를 0으로 나누려고 했기때문에 ZeroDivisionError 메세지가 출력되었다.
print(100 / 0)
# ZeroDivisionError: division by zero

 

4. IndexError

인덱스의 범위를 초과하는 값을 요청했을때 IndexError라는 에러 메세지가 발생한다. 아래의 코드에서는 x라는 리스트에서 5번째 인덱스값을 가지고 있는 데이터를 출력하라는 프린트함수가 있다. x는 인덱스번호가 0부터 4까지인 총 5개의 데이터를 가지고 있으므로 인덱스 범위를 초과하는 값을 요청받았기 때문에 IndexError라는 에러메세지가 출력된다.

x = ['hello', 0, 'python', False, (1, 2, 3)]
print(x[5])
# IndexError: list index out of range

pop()이라는 함수는 리스트 뒤에서부터 데이터를 하나씩 리턴하고 기존 리스트에서 삭제하는 함수다. 리스트 y안에는 총 3개의 데이터가 들어있는데 pop()이라는 함수를 사용해 데이터의 값을 4번 삭제했으므로 IndexError라는 에러메세지가 출력된다.

y = [1, 2, 3]
print(y.pop())
print(y.pop())
print(y.pop())
print(y.pop())
# IndexError: pop from empty list

 

5. keyError

딕셔너리 데이터에 없는 key를 요청했을때 발생하는 keyError라는 에러 메세지가 발생한다. 딕셔너리의 value값을 key로 가져오는 2가지 방법이 있는데 첫번째는 키 이름으로 직접 접근하는 것이고 두번째는 get 메소드 사용하는 것이다. get 메소드 사용하면 해당하는 데이터가 없더라도 에러메세지를 출력하지 않고 None을 출력한다.

dict = { 'Name': 'Olivia', 'Born': '2003', 'City': 'California' }

print(dict['birthday'])
# KeyError: 'birthday'

print(dict.get('birthday'))
# None

 

딕셔너리의 value값을 key로 가져오는 2가지 방법

1) 키 이름으로 직접 접근

딕셔너리['키이름']

2) get 메소드 사용 

딕셔너리.get('키이름')

 

6. AttributeError

어떤 모듈에 존재하지 않는 속성을 사용할때 AttributeError라는 에러 메세지가 출력된다. 아래의 코드에서 time이라는 모듈을 import하고 메소드 time을 호출했을때는 제대로 작동되지만 time이라는 모듈에 없는 whattimeisit을 호출했을때는 에러메세지 AttributeError가 출력된다.

import time

print(time.time())
# 1643634191.539969

print(time.whattimeisit())
# AttributeError: module 'time' has no attribute 'whattimeisit'

 

7. ValueError

참조하려는 값(value)이 존재하지 않을때 ValueError라는 에러 메세지가 출력된다. 아래의 코드에서는 1203이라는 데이터는 numbers라는 리스트에 해당하는 값이 없기 때문에 ValueError 오류가 나타난다.

numbers = [1, 31, 3, 27]
numbers.remove(1203)
# ValueError: list.remove(x): x not in list

 

8. FileNotFoundError

해당하는 파일을 찾지 못했을때 발생하는 FileNotFoundError라는 에러 메세지가 출력된다. 아래의 코드에서는 존재하지 않는 test.txt파일을 여는 코드를 실행했기 때문에 FileNotFoundError 메세지가 나타난다.

f = open('test.txt')
# FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

 

9. TypeError

자료형에 맞지 않는 연산을 수행하는 경우 TypeError라는 에러 메세지가 출력된다. 아래의 코드에서 변수 x에는 가변적인 데이터를 담는 리스트가 있고 변수 y에는 불변적인 데이터를 담는 튜플이 있다. 불변형 데이터 튜플은 값을 변경할 수가 없으므로 연산을 실행할 수도 없기때문에 TypeError라는 에러 메세지가 출력된다.  

x = [1, 2] # 가변형
y = (1, 2) # 불변형
print(x + y)
# TypeError: can only concatenate list (not "tuple") to list

댓글