Language/Python

[예외처리] Python 에러 종류와 예외처리

Joonfluence 2022. 3. 27.

서론


학습목표

  • 파이썬에서의 예외처리 방법에 대해서 학습한다.
  • 파이썬에는 어떤 종류의 에러 객체들이 알고 활용할 수 있다.

본론


오늘은 간단하게 Python에서의 예외처리와 자주 발생되는 에러의 종류에 대해서 정리해보도록 합니다.

대표적인 에러 종류 8가지

  1. IndentationError
  2. SyntaxError
  3. IndexError
  4. ValueError
  5. NameError
  6. TypeError
  7. AttributeError
  8. KeyError

IndentationError

이 에러는 정확하게 들여쓰지 않으면 발생됩니다. 파이썬에서는 들여쓰기로 스코프를 판단하는데, 아래와 같이 올바르게 들여쓰기를 처리하지 않으면 에러가 발생됩니다.

# 잘못된 들여쓰기의 예

def introduce_name(name):
print(name)

>>>> IndentationError: expected an indented block after function definition on line 1

Syntax Error

파이썬 문법이 잘못 됐을 경우, 발생됩니다. 대표적인 예시는 아래와 같습니다.

name = 'lee'
if name == 'name'
    print(name)

>>> SyntaxError: expected ':'

Index Error

그 다음으로 쉽게 접할 수 있는 에러가 바로 Index Error일 것입니다. 아래와 같이, 리스트의 인덱스를 넘을 경우 해당 에러가 발생됩니다. 따라서 리스트를 사용할 때에는 인덱스를 정확하게 지정해주는 것이 중요할 것 입니다.

first_name = ['lee', 'kim', 'park']
first_name[4]

>>> IndexError: list index out of range

ValueError

두 가지 경우로 인해 발생됩니다. 첫번째는 아래의 경우처럼 부적절한 값을 인자로 전달 받은 경우입니다.

int('hello')

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

두번째는 참조하고자 하는 값이 없을 경우입니다.

arr = ['a', 'b', 'c', 'd', 'e']
arr.index('z')

>>> ValueError: 'z' is not in list

NameError

아래와 같이, 아직 선언하지 않은 변수를 호출할 경우 발생되는 에러입니다.

a = 1
b = 3
print(c)

>>> NameError: name 'c' is not defined

TypeError

아래와 같이, 잘못된 타입을 지정해서 연산할 경우 발생됩니다.

2 + "2"

>>> TypeError: unsupported operand type(s) for +: 'int' and 'str'

AttributeError

객체의 잘못된 속성을 참조할 때 발생됩니다.

from collections import deque
queue = deque()
queue.push(3)

>>> AttributeError: 'collections.deque' object has no attribute 'push'

KeyError

딕셔너리에 존재하지 않는 키 값을 참조할 때 발생됩니다.

person = {'name': 'lee', 'age': 22}
person['house']

>>> KeyError: 'house'

예외처리문

다른 프로그램잉 언어에 try ~ catch문이 있다면, 파이썬에는 try ~ except문이 있습니다. 해당 구문에서 에러가 발생되는 경우, except 블록의 코드가 실행되게 됩니다. raise 문은 throw와 같다고 보시면 됩니다.

try: 
    10 + score
except:
    raise ValueError("Invalid score")

참고한 사이트

[python] 파이썬 에러 종류 10가지
Python 14 Error 종류 & 예외처리

반응형

댓글