파이썬 예외 처리 종류 및 방법: try, except, raise
코딩을 하다 보면 예상치 못한 상황으로 인해 오류가 발생하는 경우가 많습니다. 이럴 때 파이썬의 예외 처리 기능을 이용하면 프로그램이 강제로 종료되는 것을 방지하고, 오류에 대처하는 코드를 작성할 수 있습니다. 이 글에서는 파이썬의 예외 처리 기법에 대해 알아보겠습니다.
목차
- 예외란 무엇인가?
- 기본 예외 처리: try, except문
- try … finally
- 여러 개의 오류 처리하기
- try … else
- 오류 회피하기
- 오류 일부러 발생시키기
- 사용자 정의 예외 만들기
1. 예외란 무엇인가?
예외(Exception)는 프로그램 실행 중에 발생하는 오류 상황을 말합니다. 예외가 발생하면 프로그램은 즉시 중단되고, 에러 메시지가 출력됩니다. 예외 처리는 이런 예외 상황을 미리 예상하고 대비하는 프로그래밍 기법입니다.
2. 기본 예외 처리: try, except문
기본 사용법: try, except만 사용하기
가장 기본적인 예외 처리 방법은 try, except문을 사용하는 것입니다. try 블록 안에는 오류가 발생할 가능성이 있는 코드를, except 블록 안에는 오류가 발생했을 때 실행할 코드를 작성합니다.
try:
# 오류가 발생할 가능성이 있는 코드
a = [1, 2]
print(a[3]) # IndexError: list index out of range
print(10 / 0) # ZeroDivisionError: division by zero
except:
# 오류 발생 시 실행할 코드
print("오류가 발생했습니다.")
이 예제에서는 a[3]와 10 / 0에서 IndexError와 ZeroDivisionError가 발생합니다. 이럴 경우 except 블록의 코드가 실행되어 “오류가 발생했습니다.”를 출력합니다.
발생 오류에 따른 except문 사용하기
발생 오류에 따라 다른 처리를 하고 싶을 때는 여러 개의 except문을 사용합니다. 각 except문은 특정 오류 또는 오류의 집합을 처리합니다.
try:
# 오류가 발생할 가능성이 있는 코드
a = [1, 2]
print(a[3]) # IndexError: list index out of range
print(10 / 0) # ZeroDivisionError: division by zero
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("잘못된 인덱스입니다.")
이 예제에서는 ZeroDivisionError가 발생하면 “0으로 나눌 수 없습니다.”를 출력하고, IndexError가 발생하면 “잘못된 인덱스입니다.”를 출력합니다.
발생 오류와 오류 변수를 함께 사용하기
발생한 오류의 상세 정보를 함께 출력하고 싶을 때는 except문에 오류 이름과 오류 변수를 함께 사용합니다.
try:
# 오류가 발생할 가능성이 있는 코드
a = [1, 2]
print(a[3]) # IndexError: list index out of range
print(10 / 0) # ZeroDivisionError: division by zero
except ZeroDivisionError as e:
print("0으로 나눌 수 없습니다:", e)
except IndexError as e:
print("잘못된 인덱스입니다:", e)
이 예제에서는 오류 발생 시 오류 메시지를 함께 출력합니다. 오류 변수 e는 발생한 오류의 인스턴스를 가리킵니다.
3. try … finally
try … finally문은 예외 발생 여부와 관계없이 항상 마지막에 실행되는 코드를 작성할 때 사용합니다.
try:
# 오류가 발생할 가능성이 있는 코드
a = [1, 2]
print(a[3]) # IndexError: list index out of range
print(10 / 0) # ZeroDivisionError: division by zero
finally:
print("이 부분은 항상 실행됩니다.")
이 예제에서는 try 블록의 코드 실행 후, finally 블록의 코드가 항상 실행됩니다.
4. 여러 개의 오류 처리하기
하나의 try문에서 여러 개의 오류를 처리하려면 괄호를 사용하여 except문을 작성합니다.
try:
a = [1, 2]
print(a[3]) # IndexError: list index out of range
print(10 / 0) # ZeroDivisionError: division by zero
except (ZeroDivisionError, IndexError) as e:
print("오류가 발생했습니다:", e)
이 예제에서는 ZeroDivisionError와 IndexError 두 가지 오류를 동일하게 처리합니다.
5. try … else
try … else문은 try 블록이 오류 없이 성공적으로 실행되었을 때 실행되는 코드를 작성할 때 사용합니다.
try:
print("Hello, World!")
except:
print("오류가 발생했습니다.")
else:
print("성공적으로 실행되었습니다.")
이 예제에서는 try 블록의 코드가 성공적으로 실행되면 else 블록의 코드가 실행됩니다.
6. 오류 회피하기
특정 오류가 발생했을 때 프로그램을 중단하지 않고 계속 실행하게 하려면 pass문을 사용합니다.
try:
a = [1, 2]
print(a[3]) # IndexError: list index out of range
except IndexError:
pass
이 예제에서는 IndexError가 발생해도 pass문 때문에 프로그램이 중단되지 않고 계속 실행됩니다.
7. 오류 일부러 발생시키기
프로그램에서 특정 조건에서 오류를 일부러 발생시키고 싶을 때는 raise문을 사용합니다.
try:
age = -1
if age < 0:
raise ValueError("나이는 0 이상이어야 합니다.")
except ValueError as e:
print(e)
이 예제에서는 age가 0 미만인 경우 ValueError를 일부러 발생시킵니다.
8. 사용자 정의 예외 만들기
프로그램에서 특정한 조건을 만족할 때만 발생시키는 예외를 정의하려면, 새로운 예외 클래스를 만들어 사용합니다.
class NotPositiveError(Exception):
pass
try:
number = -1
if number <= 0:
raise NotPositiveError("양의 정수가 아닙니다.")
except NotPositiveError as e:
print(e)
파이썬에서는 사용자가 직접 예외를 정의하여 사용할 수 있습니다. 이를 위해서는 먼저 Exception 클래스를 상속받아 새로운 예외 클래스를 생성해야 합니다. 이 예제에서는 ‘NotPositiveError’라는 새로운 예외를 정의하고, number가 양의 정수가 아닐 때 이 예외를 발생시킵니다. ‘NotPositiveError’ 클래스는 파이썬의 내장 클래스인 ‘Exception’을 상속받아 사용자 정의 예외를 생성합니다. 이렇게 사용자 정의 예외를 생성함으로써, 특정 조건에서만 발생하는 예외를 더욱 명확하게 처리할 수 있게 됩니다.
☞ 파이썬에서 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 기법입니다. 다양한 예외 처리 기법을 이해하고 적절히 활용하면, 예상치 못한 오류로부터 프로그램을 보호하고, 오류 발생 시 적절한 대응을 할 수 있습니다.
참고 자료
- 파이썬 공식 문서: 에러와 예외 (https://docs.python.org/ko/3/tutorial/errors.html)
함께 보면 좋은 이전 게시글
- 파이썬 함수 사용법: 매개변수와 인수, 람다 함수
- 파이썬 if 조건문과 예제: if, elif, else와 조건부 표현식
- 파이썬 클래스와 객체: 상속, 생성자, 메서드 오버라이딩 사용하기
- 파이썬 필수 내장 함수: 코드를 더 효율적으로 작성하기
- 파이썬 파일 처리 방법: 파일 생성 및 읽기와 쓰기
이 글이 도움이 되셨다면 공유를 부탁 드립니다. 다음 글에서 뵙겠습니다!