[Python] 예외 처리 / assert

jaylight·2020년 12월 6일
1

예외

  • 파이썬은 코드 관련 에러가 발생할 때, 예외(exception)이라는 특수 함수의 반환 값으로 표시
  • 특정 상황에서 실패할 수 있는 코드를 실행할 때, 잠재적 에러 방지를 위해 적절한 예외 처리(exception handler)가 필요

예외 처리를 하지 않은 경우

  • 위치의 범위를 벗어난 리스트나 튜플의 접근
short_list = [1, 2, 3]
position = 5
short_list[position]

# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# Index Error: list index out of range
  • 별도의 예외처리를 하지 않을 경우, 위와 같이 에러 메시지와 오류가 발생한 위치에 대한 정보를 출력하고 프로그램을 종료

예외 처리하기: try, except

  • 에러가 예상되는 코드에 try, 에러 처리를 위해 except를 사용
  • try 문의 코드를 실행해서 에러가 발생한다면, except 문의 코드가 실행
    try 문에서 에러가 없다면, except 문을 건너 뜀
  • except 문의 인수: try 문에서 두 개 이상의 예외 타입이 발생하면, 인수를 통해 별도의 예외 핸들러를 제공

인수가 없는 except문: 모든 예외 타입을 포괄적으로 처리

  • 예외 타입을 넘어 예외에 대한 세부 정보를 얻고 싶다면, 변수이름에서 예외 객체 전체를 얻을 수 있음
except 예외 타입 as 변수명:

사용자 정의 예외 만들기

예외 활용
1. 파이썬 표준 라이브러리에 정의된 예외 처리 중 필요한 예외 처리를 선택해서 사용
2. 프로그램에서 특수한 상황에 발생할 수 있는 예외를 처리하기 위한 예외 유형을 정의

  • 기본적으로 모든 예외는 클래스(class)이며, Exception class의 자식이다.
    따라서 위 속성을 활용하여, 예외 선언 시 class 를 통해 정의한다.
class UppercaseException(Exception):
  pass

words = ['eenie', 'meenie', 'miny', 'MO']
for word in words:
  if word.isupper():
    raise UppercaseException(word)

# Traceback (most recent call last):
#  File "<stdin>", line 3, in <module>
# __main__.UppercaseException: MO

assert

  • 뒤의 조건이 True 가 아니면 AssertError를 발생시킴
a = 3
assert a == 2

# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# Assertion Error
  • (활용) 함수 성능 강화를 위해, 반드시 특정 상황만을 처리하도록 만들 때 활용
    if, 예외 처리와 유사한 기능을 함

0개의 댓글