Python 예외처리

Hwang Ji Eun·2024년 5월 8일

Inflearn <프로그래밍 시작하기: 파이썬 입문 강의> 내용임을 밝힙니다.

에러를 예외처리하는 것큼이나 코드 실행 프로세스에서 예상과 다르게 돌아가는 예외를 처리하는 방법도 필요하므로, raise 키워드로 예외를 발생시키기도 한다.

에러가 발생해 프로그램이 멈추지 않게 하기 위해,
1. 예외는 반드시 처리되어야 하고,
2. 그에 대한 로그가 남아야 하며,
3. 예상하지 못한 프로세스에 관해 예외를 발생시키기도 한다.
4. Python에서는 예외가 없는 것을 가정하고 프로그램을 작성 후, 런타임에서 예외가 발생 시 예외 처리하는 것을 권장한다.

에러의 예시

  • SyntaxError: 문법적 오류
  • TypeError: 자료형에 맞지 않는 연산을 수행하려고 할 경우
x = [1,2]
y = (1,2)
print(x + y)    # TypeError: can only concatenate list (not "tuple") to list
  • NameError: 참조할 변수가 선언되어 있지 않은 경우
  • IndexError: 인덱스 범위를 벗어난 호출을 시도할 경우
x = [50, 70, 90]
print(x.pop())
print(x.pop())
print(x.pop())
print(x.pop())    # IndexError: pop from empty list
  • KeyError: 존재하지 않는 키를 호출할 경우
dic = {'name': 'Lee', 'Age': 41, 'City': 'Busan'}
print(dic['hobby'])    # KeyError: 'hobby'
print(dic.get('hobby'))    # dictionary에서 get을 쓰는 것이 권장됨->KeyError 대신 'None'을 출력하므로.
  • ValueError: 존재하지 않는 값을 호출할 경우
x = [10, 50, 90]
x.remove(200)    # ValueError: list.remove(x): x not in list
  • AttributeError: 모듈, 클래스에 있는 속성을 잘못 사용할 경우
import time
print(time.time2())    # AttributeError: module 'time' has no attribute 'time2'. Did you mean: 'time'?

예외처리 기본 문법

try : 에러가 발생 할 가능성이 있는 코드 실행
except 에러명1: 여러개 가능
except 에러명2:
else : try 블록의 에러가 없을 경우 실행
finally : 항상 실행

예외처리 패턴 4가지

  1. 발생할 에러를 예측해서 명시하는 경우(권장)
name = ['Kim', 'Lee', 'Park']

try:
    z = 'Kim' # 'Cho'
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except ValueError:
    print('Not found it! - Occurred ValueError!')
else:
    print('Ok! else.')
  1. 에러를 명시하지 않고 예외처리하는 경우
name = ['Kim', 'Lee', 'Park']

try:
    z = 'Cho' # 'Cho'
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except:
    print('Not found it! - Occurred ValueError!')
else:
    print('Ok! else.')
  1. 모든 에러를 Exception 객체로 묶어 표기하는 경우
name = ['Kim', 'Lee', 'Park']

try:
    z = 'Cho' # 'Cho'
    x = name.index(z)
    print('{} Found it! {} in name'.format(z, x + 1))
except Exception as e:
    print(e)    # 어떤 에러 발생했는지 로그 남기기
    print('Not found it! - Occurred ValueError!')
else:
    print('Ok! else.')
finally:
    print('Ok! finally')
  1. 에러-예외처리 직접 발생 시키는 경우
try:
    a = 'Park'
    if a == 'Park':
        print('OK! Pass!')
    else:    # 프로그램 목적상 'Park'이 아니면 문제가 발생한다면 에러로 처리할 수 있다
        raise ValueError
except ValueError:
    print('Occurred! Exception!')
else:
    print('Ok! else!')
profile
기술(technology)을 기술(discription)하자.

0개의 댓글