[패스트캠퍼스 환급챌린지]딥러닝/Chapter 3. 파이썬

[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-14 예외 처리

포리셔 2023. 5. 4. 11:51

03-14 예외 처리

이제 파이썬 기능에 대한 마지막 포스트로 예외 처리에 대해 알아보겠습니다. 예외는 프로그램 실행 중 발생하는 오류를 뜻합니다. 이러한 오류가 발생하면 프로그램이 그 자리에서 멈추기 때문에, 때로는 이러한 예외가 발생하더라도 프록램이 그대로 실행되게끔 처리해주는 과정이 필요합니다. 이를 예외 처리라고 합니다.

예외

def) 예외 처리(exception handling): 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것
(동의어: 오류 처리(trouble shooting))
예외, 즉 오류, 에러에는 여러 종류가 있습니다. 대표적으로 아래 첫 번째 이미지에서 보는 것과 같이 어떤 수를 0으로 나누면, 수학적으로 0으로 나누는 것이 불가능하기 때문에 ZeroDivisionError라는 에러가 발생합니다. 두 번째 이미지의 경우에는 인덱스가 0, 1, 2까지만 존재하는 리스트에서 존재하지도 않는 5번 원소를 찾기 때문에 IndexError가 발생하는 것을 볼 수 있습니다.

ZeroDivisionError 예시.

 

IndexError 예시.

기본적으로 예외가 발생하면 프로그램이 중단되지만, 이러한 예외가 발생해도 프로그램이 계속 유지되어야 하는 경우 이러한 예외를 특수하게 처리해줘야 합니다. 이러한 과정을 통틀어 예외 처리라고 합니다. 기본적으로 예외 처리는 try-except문을 통해 이루어집니다. 예외가 발생하는 순간, 코드 실행이 중단되며, except 블록으로 이동해 코드가 실행됩니다. 아래 예시에서도 0으로 나누는 예외가 발생하자, try 블록에서 except 블록으로 이동해 print 함수가 실행되는 것을 볼 수 있습니다.

try:
    result = 1 / 0
    print(result)
except:
    print("예외 발생")

예외 처리 구문

위의 예시를 응용해서 예외가 발생했을 때 특정 오류 메시지를 출력할 수 있게 처리할 수도 있습니다. 다시 두 번째 이미지의 IndexError로 돌아가보죠. IndexError가 발생하면 except 블록으로 이동해 print 함수를 세 번 실행합니다. 여기서 세 번째 print문에서 IndexError의 에러 메시지를 출력하게끔 합니다.

arr = [7, 5, 1]
index = 5

try:
    data = arr[index]
    print(data)
except IndexError as e:
    print("배열의 크기를 벗어난 인덱스에 접근할 수 없습니다.")
    print("[오류 메시지]")
    print(e)

한편, except 문을 여러 번 사용해서 예외 처리를 할 수도 있습니다. ZeroDivisionErrorIndexError를 동시에 예외 처리하는 구문을 작성해보겠습니다.

data_list = [1, 2, 3, 4, 5]
index = 3
x = 0

try:
    data = data_list[index]
    result = data / x
    print(result)
except IndexError as e:
    print("배열의 크기를 벗어난 인덱스에 접근할 수 없습니다.")
    print("[오류 메시지]")
    print(e)
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다.")
    print("[오류 메시지]")
    print(e)

리스트의 데이터 인덱스를 초과했는지를 먼저 IndexError로 표시합니다. 여기서는 길이 5의 리스트에서 3번 원소를 추출하는 거니 예외 처리를 하지 않아도 되므로 IndexError 메시지는 출력되지 않는군요.
문제는 그 아래에서 발생합니다. 0으로 나누니까 ZeroDivisionError가 출력되어야 겠죠? 따라서 2번째 except 블록으로 이동해 함수들을 실행합니다.

실전에서의 예외 처리

딥러닝 프로그램을 작성할 때는 리스트 등의 차원이 일치하지 않아서 연산 수행 과정에 오류가 발생할 수 있습니다. 그 이전에, 존재하지 않거나 잘못된 파일을 불러오면서 에러가 발생할 수도 있습니다. 그럼에도 불구하고 프로그램이 실행되는 데에는 지장이 없고 그대로 실행되어야 한다면 이러한 예외 처리를 이용할 수 있겠습니다.

이제 가장 기본적인 파이썬 문법들을 모두 다뤘습니다. 다음 포스트부터는 Chapter 4로 넘어가 본격적으로 딥러닝에 사용되는 대표적인 프레임워크/라이브러리인 파이토치와 텐서플로를 배우도록 하겠습니다.

 

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.