03-14 예외 처리
이제 파이썬 기능에 대한 마지막 포스트로 예외 처리에 대해 알아보겠습니다. 예외는 프로그램 실행 중 발생하는 오류를 뜻합니다. 이러한 오류가 발생하면 프로그램이 그 자리에서 멈추기 때문에, 때로는 이러한 예외가 발생하더라도 프록램이 그대로 실행되게끔 처리해주는 과정이 필요합니다. 이를 예외 처리라고 합니다.
예외
def) 예외 처리(exception handling): 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것
(동의어: 오류 처리(trouble shooting))
예외, 즉 오류, 에러에는 여러 종류가 있습니다. 대표적으로 아래 첫 번째 이미지에서 보는 것과 같이 어떤 수를 0으로 나누면, 수학적으로 0으로 나누는 것이 불가능하기 때문에 ZeroDivisionError
라는 에러가 발생합니다. 두 번째 이미지의 경우에는 인덱스가 0, 1, 2까지만 존재하는 리스트에서 존재하지도 않는 5번 원소를 찾기 때문에 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
문을 여러 번 사용해서 예외 처리를 할 수도 있습니다. ZeroDivisionError
와 IndexError
를 동시에 예외 처리하는 구문을 작성해보겠습니다.
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로 넘어가 본격적으로 딥러닝에 사용되는 대표적인 프레임워크/라이브러리인 파이토치와 텐서플로를 배우도록 하겠습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'[패스트캠퍼스 환급챌린지]딥러닝 > Chapter 3. 파이썬' 카테고리의 다른 글
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-13 클래스의 이해와 활용 (0) | 2023.05.03 |
---|---|
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-12 함수의 이해와 활용 (0) | 2023.05.01 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-11 파일 입출력 (0) | 2023.04.17 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-10 반복문 (0) | 2023.04.14 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-09 조건문 (0) | 2023.04.12 |