본문 바로가기
컴퓨터 프로그래밍/python

Python 예외 처리 (exception process)

by JaeBaek 2020. 8. 14.

except (Wikimedia)

■ 예외 처리 (exception process)

 예외란 프로그램 코드는 이상이 없지만 실행 중에 불가피하게 발생하는 문제를 말합니다. 아무리 프로그램 코드를 정교하게 짠다고 해도 어쩔수 없는 다양한 원인으로 인해 프로그램을 아무리 정교하게 작성해도 예외는 발생할 수 밖에 없습니다. 예외를 막을 근본적인 방법은 없으며 모든 예외를 처리할 수 밖에 없습니다.

try:

    실행할 명령

except 예외 as 변수:

    오류 처리문

else:

    예외가 발생하지 않을 때의 처리

 이 구문이 의미하는 바는 try 블록의 코드를 실행하다가 예외가 발생하면 except 블록으로 점프합니다. 예외가 발생한 코드는 어절 수 없이 제대로 실행할 수 없지만 예외를 설정해 처리하면 최소한 프로그램이 다운되거나 멈추지 않고 남은 코드를 계속 실행할 수 있습니다.

exception

while True:

    sen=input("Input score : ")

    try:

        score=int(sen)

        print("Score : %d"%score)

        break

    except:

        print("Not number. Try again")

print("Done")

result

Input score : 만점
Not number. Try again
Input score : 100
Score : 100
Done

위 코드를 보면 알 수 있듯이 현재 소스코드에서 컴퓨터가 원하는 값이 아닌 경우에는 예외처리를 하고 계속해서 반복해서 답을 요구하는 것을 알 수 있습니다. 예를들면 개인정보를 입력하는 칸이 있다고 했을 때, 이름부분에 전화번호를 입력하면 잘못 입력되었다고 오류를 띄우는 것과 같은 의미라고 생각하시면 될 것 같습니다.

 

★ 예외 종류

예외 설명
NameError 명칭이 발견되지 않고, 초기화하지 않은 변수를 사용할 때 발생
ValueError 타입은 맞지만 값의 형식이 잘못되었을때 발생
ZeroDivisionError 0으로 나누었을 경우 발생
IndexError 첨자가 범위를 벗어났을 경우 발생
TypeError 타입이 맞지 않고, 숫자가 필요한 곳에 문자열을 사용한 경우 발생

 

★ raise 명령

raise 명령은 고의적으로 예외를 발생시킵니다. 작업을 위한 선결 조건이 맞지 않거나 더 이상 진행할 수 없는 치명적인 문제가 발생했을 때 호출원으로 예외를 던져 잘못되었음을 말합니다. 

raise

def cal(n):

    if (n<0):

        raise ValueError

    sum=0

    for i in range(n+1):

        sum+=i

    return sum

 

while True:

    try:

        num=int(input("Number : "))

        summ=cal(num)

        print("~%d = %d"%(num,summ))

        break

    except:

        print("Try again!")

result

Number : 삼
Try again!
Number : 3
~3 = 6

 

 

 

 

■ 자원 정리

★ finally

 위에서는 try이후 except에 대해서 알아보았습니다. except는 구문오류가 났을 때 그것을 예외로 처리를 하는 것이었습니다. 그러면 예외 상관없이 반드시 실행해야할 명령에 대해서는 어떻게 지정을 할까요? 바로 finally 블록을 사용하면됩니다. 예를들어 일부러 틀린 구문을 사용하여 finally 블록이 실행이 되는지 확인 해보겠습니다.

finally

try:

    print("connect Internet")

    n=1/0

    print("Correspondence")

finally:

    print("Disconnect Internet")

print("Done")

result

connect Internet
Disconnect Internet
[]

 

위 결과처럼 except 블록을 사용하지 않았음에도 finally를 통해서 Disconnect Internet을 수행한 것을 볼 수 있습니다. 즉 다시 말하면 n=1/0이라는 예외가 발생했는데 이때 try 블록을 빠져 나오지만 finally 블록을 거쳐 접속을 해제한 것이 됩니다.

 

★ assert

assert 문장은 프로그램의 현재 상태가 맞는지 확인하는 것입니다. 점검할 조건과 조건이 거짓일 때 보여줄 메세지를 지정하는 것입니다. 

assert 조건, 메세지

assert

score=110

assert score<100"Score should be under 100"

print(score)

result

AssertionError: Score should be under 100
# 위 구문이 발생하는 것을 알 수 있음.

 

'컴퓨터 프로그래밍 > python' 카테고리의 다른 글

Python 클래스 (Class)  (0) 2020.08.16
Python 파일 (file)  (0) 2020.08.14
Python 표준 모듈  (0) 2020.08.13
Python 컬렉션(Collection)  (0) 2020.08.13
Python 사전(Dictionary)과 집합(Set)  (0) 2020.08.12

댓글