본문 바로가기
Python/Python 문법

Python 예외처리 [ try, except, finally ]

by lchit 2019. 12. 29.

 

 

 

예외처리?

프로그램 작동 중 오류가 발생하면 프로그램이 멈춘다.

오류로 인하여 프로그램 작동이 중지되는 것을 방지하고자

예외 처리라는 것을 하게된다.

 

예외처리를 하면

오류 발생 시 프로그램이 중단되지 않고

오류 발생지점을 지나치고

미리 설정해둔 작동이 이루어진다.


예외처리하는 법

try: # 필수
    오류가 발생될 것으로 예상되는 문장
    ...
except [오류 이름 [as 변수]]: # 필수 => 오류 이름은 생략할 수 있다.
    오류가 발생되면 실행할 문장
    ...
finally: # 선택 => 필요하면 사용한다.
    오류 발생 여부와 관계없이 무조건 실행할 문장


예외처리 예제

(1)

4를 0으로 나는 것을 출력하라는 작동에는

ZeroDivisionError가 발생하고 프로그램이 중단된다.

0으로 나눌 수 없다는 오류이다.

 

예외처리를 해서 프로그램이 중단되지 않게 해 보자

 

try 바디 안에 실행할 작업을 넣고

except 바디에 오류 발생 시 실행할

출력 작업을 넣고 실행하자

 

프로그램이 중단되지 않고 예외처리를 해 논

작동이 정상적으로 실행된다.


(2)

 

이 예제 문은 리스트 요소를 사용자로부터 입력받아

리스트에 추가하고 출력하는 예제이다

 

위처럼 작동 시 input의 입력은 기본적으로

String 형 이기 때문에 정수를 입력하건 문자를 입력하건

모두 String형으로 입력될 것이다.

 

이를 예외처리로 문자와 숫자를 구분하여

저장하는 방법이 있다.

위 코드를 변경해 보았다.

정수 리스트와

문자열 리스트를 따로 만들고

try 바디에 int 형으로 데이터를 변환하여

numLst에 추가하고

 

만약 오류가 발생한다면(문자열 입력이 들어온다면)

strLst에 추가한다.

 

이 두 리스트를 오름차순 정렬 후

더한 후 출력하는 것이다.

 

예외처리를 하였기 때문에 

정수형으로의 형 변환 오류가 발생하지 않고

프로그램이 정상적으로 동작한다.


다양한 예외처리방법

(1) except 뒤에 오류코드를 생략 시 모든 오류에 대한

처리를 하나로 통일시킨다.

 

try 바디에 무엇이 있고 어떤 오류가 발생하든지

except문에서 뒤에 오류에 대한 지정이 없었다면

모든 오류에 대한 처리를 하나의 방식으로 처리하게 된다.

 

 

 

(2) except 뒤에 오류명을 입력 시

오류 별로 다른 예외처리가 가능하다.

 

except뒤에 ZeroDivisionError, IndexError 등등

오류명을 지정 시 하나의 try 바디에서 발생할 수 있는

오류를 오류 별로 except문을 만들 수 있다

 

ex)

try:

    실행할 작업 1

    실행할 작업 2

    .....

except ZeroDivisionError:

    print('0으로 나눌 수 없습니다')

except IndexError:

    print('인덱스 번호를 확인해주세요')

except TypeError:

    print('타입 지정이 잘못되었습니다.')

 

 

 

(3) 오류명 뒤에 뒤에 오류 이름을 쓰고 

변수를 선언하면 오류 메시지가 변수에 저장된다.

 

ex)

except IndexError as e

print('발생 오류 : ', e)

 

>>

발생 오류 : IndexError

 

 

 

(4) finally 작성 시 오류 발생 여부와 상관없이 

무조건 finally 바디안의 작업이 실행된다.

 

ex)

finally:
    print('무조건 이곳의 문장이 실행된다.')

 

오류 발생 시 

>> 무조건 이곳의 문장이 실행된다.

 

오류 발생 x 시

>> 무조건 이곳의 문장이 실행된다.