Python/파이썬 기초

[Python] 예외 처리

isfp_yykkng 2023. 2. 19. 23:05

예외 처리

예외 처리는 에러가 발생할 수 있는 코드에서 발생할 에러를 미리 처리하는 과정이다. try-except 구문 대신 if - else를 사용할 수도 있다. ( if - else로 처리할 수 있으면 처리하는 거 권장! )

예외 처리 구조

try :
    <에러가 발생할 가능성이 있는 코드>
except <에러 종류> :
    <에러가 발생했을 경우 처리할 코드>
 # 예외 처리 예제
def safe_pop_print(list, index) :
	try:
    	print(list.pop(index))
    except IndexError :
    	print('{} index의 값을 가져올 수 없습니다.'.format(index)) # index 벗어난 경우 에러 처리

safe_pop_print([1,2,3], 5)

# 예외 처리 예제 -> if-else문
def safe_pop_print(list, index) :
	if index < len(list):
    	print(list.pop(index))
    else:
    	print('{} index의 값을 가져올 수 없습니다.'.format(index)) # index 벗어난 경우 에러 처리

safe_pop_print([1,2,3], 5)

하지만 if-else문으로 바꿀 수 없는 try-except문으로만 처리해야 하는 경우도 있다.

# try except로만 처리 가능 (그 외에도 많음.)
try :
	import my_module
except ImportError:
	print('모듈이 없습니다.') # my_module이라는 모듈이 없어서 에러 처리

[참고] 파이썬 예외 종류

https://hleecaster.com/python-exception/

 

파이썬 예외처리 쉽게 이해하기 - 아무튼 워라밸

파이썬에서 발생할 수 있는 예외, 에러의 종류들을 정리하고, 그것들을 어떻게 처리할지 전략을 아주 쉽게 남겨보았다.

hleecaster.com

예외 이름을 모르는 경우 처리방법

ex는 발생한 에러의 이름을 받아오는 변수로 여기에 어떤 에러가 발생했는지 알 수 있다.

try :
    <에러가 발생할 가능성이 있는 코드>
except Exception as ex :
    print('에러가 발생 했습니다' , ex
try:
	list = []
    print(list[0])   # try문에 에러가 발생한 시점에서 바로 except문으로 넘어감
    
    text = 'abc'
    number = int(text)
    
except Exception as ex:
	print('에러가 발생했습니다.', ex)

Raise

raise는 사용자가 직접 에러를 발생시키는 기능으로 많이 사용하면 코드를 읽기 어려워지기 때문에 주의해야 한다.

def rsp(mine, yours) :
	allowed = ['가위', '바위', '보']
    if mine not in allowed:
    	raise ValueError
    if yours not in allowed:
    	raise ValueError
        
try:
	rsp('가위','바') # '바'는 allowed에 없어서 ValueError를 일으킴(raise)
except ValueError:
	print('잘못된 값을 넣은 것 같습니다')