개발 이야기

[파이썬 완전정복] 예외처리의 활용 방법

ANDYLION 2020. 6. 22. 00:01
728x90
반응형

이번 시간은 예외처리에 대해 배워보겠습니다.

 

예외처리란?

특정 에러가 발생했을 경우 특정 행위를 해라라는 의미를 가집니다.

프로그래밍을 할 때 문법오류나 오타의 경우는 빌드할 때

오류에 대한 내용을 바로 알려주고 빌드 실패를 합니다.

참 다행이죠?

그런데 논리적인 에러의 경우는 어떤가요?

빌드는 정상적으로 됩니다.

그런데 프로그램이 실행되다가 갑자기

심각한 오류 메세지와 함께 프로그램이 종료됩니다.

 

바로 이러한 문제때문에 예외처리를 하게됩니다.

 

만약 사용자에게 프로그램이 1~10 범위에서 입력을 하라고 했을 때

11을 입력했다면, 어떻게 될까요?

당연히 프로그램 입장에서는 사용자에게 물음표를 날리고 싶지만

그 내용이 없기 때문에 물음표도 못날리고 실행 범위 밖이기 때문에

아무것도 나타나지 않습니다.

 

또 하나 예를 들어보겠습니다.

우리는 나눗셈에서 0으로는 나눌 수가 없습니다.

하지만 사용자가 실수로 0으로 나눴다고 생각해봅시다.

 

분명 프로그램은 처리를 할 수 없습니다.

이러한 에러를 논리적인 오류 (에러)라고 합니다.

 

이러한 논리적인 오류 (에러)를 방지하기 위해 예외처리를 합니다.

# 예외처리 문법

try :
	실행문장
except 예외 종류 :
	예외가 발생하면 실행하는 문장
else:
	예외가 발생하지 않을 때 실행할 문장

 

# 숫자 입력에 숫자가 아닌 문자가 입력되는 경우

num2에 숫자를 입력해야하는데 h라는 문자를 입력하니

에러가 발생하네요.

그럼 이 경우에 예외처리를 해보겠습니다.

a라는 문자를 입력했더니 예외처리를 위해 만든 문장이 출력됩니다.

이런 식으로 문자를 입력하면 다시 숫자를 입력하게 하는 방식이나

팝업을 통해 잘못입력했다는 메세지를 출력하는 방식으로

많이 사용합니다.

 

# 0으로 나눈 경우의 예외처리

나눗셈을 할 때 0으로 나눌 수 없습니다.

그러나 사용자가 실수로 0으로 나눌 경우가 생길 수 있습니다.

그래서 0에 대한 예외처리를 한번 해보겠습니다.

10을 0으로 나누려고하니 다음과 같이 ZeroDivisionError 메세지가 나왔습니다.

6을 2로 나누니까 3이 정상적으로 출력되는 것을 확인했습니다.

 

그럼 이제 0으로 나누는 경우에 대한 예외처리를 해보겠습니다.

0으로 나눈 경우 예외처리가 된 것을 확인 할 수 있습니다.

그러나 예외처리를 한가지만 하는 경우는 실전에서는 없습니다.

아래의 내용을 볼까요?

 

# 두 개 이상의 예외처리가 필요한 경우

 

except를 두개 이상 사용해서 하는 경우입니다.

 

모든 논리 오류시 예외처리를 해주는 경우입니다.

 

ValueError와 ZeroDivisionError가 발생하는 경우 예외처리하는 방법입니다.

 

if ~ else가 익숙한 개발자들에게는 혼동이 올 수도 있는 부분입니다.

try를 시도하여 성공하면 else가 수행됩니다.

반면 try를 시도해서 실패하면 except가 수행됩니다.

# try ~ except ~ else 문법의 구조

try : # try를 시도해서
	try실행문장 # 참인경우 else 문장 실행 거짓인 경우 except 문장 수행
    
    
    
    
except 에러코드 : 
	except 실행문장
else :
	try가 참인 경우 실행문장

이해를 돕기 위해 try와 except, else를 좀 멀리 떨어트렸습니다.

try를 시도해서 참과 거짓을 판별합니다.

그리고 except ~ else 구문을 실행한다고 이해하면 편할 것 같습니다.

728x90
반응형
SMALL