본문 바로가기
Python/문법

[Python] 파이썬 예외 처리 정리 및 사용법

by 에파 2024. 8. 5.
728x90

프로그래밍을 하다 보면 예기치 않은 오류가 발생할 수 있습니다. 이러한 오류를 예외(Exception)라고 하며, 예외 처리는 이러한 오류를 관리하여 프로그램의 비정상 종료를 방지하는 방법입니다. 파이썬은 예외 처리를 위한 강력한 메커니즘을 제공합니다. 이번 글에서는 파이썬에서 예외를 처리하는 방법에 대해 알아보겠습니다.

 

1. 예외란 무엇인가?

예외는 프로그램 실행 중에 발생하는 오류를 의미합니다. 예외는 코드의 논리적 오류, 잘못된 사용자 입력, 네트워크 문제 등 다양한 원인으로 인해 발생할 수 있습니다. 파이썬에서는 예외가 발생하면 프로그램의 실행이 중단되고, 예외가 처리되지 않으면 에러 메세지가 출력됩니다.

 

# ZeroDivisionError 예제
result = 10 / 0

# 출력 결과:
# ZeroDivisionError: division by zero

 

위 코드에서는 0으로 나누기를 시도하여 'ZeroDivisionError' 예외가 발생합니다.

 

2. 기본 예외 처리

파이썬에서는 'try'와 'except' 블록을 사용하여 예외를 처리할 수 있습니다. 'try' 블록 내에서 예외가 발생하면 'except' 블록이 실행됩니다.

 

try:
    result = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

# 출력 결과:
# 0으로 나눌 수 없습니다.

 

위 코드에서는 'ZeroDivisionError' 예외가 발생했을 때 'except' 블록이 실행되어 사용자에게 알림 메세지를 출력합니다.

 

3. 여러 예외 처리

하나의 'try' 블록에 대해 여러 개의 'except' 블록을 사용하여 다양한 예외를 처리할 수 있습니다.

 

try:
    number = int(input("숫자를 입력하세요: "))
    result = 10 / number
except ValueError:
    print("유효한 숫자가 아닙니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

# 출력 결과 예시:
# 숫자를 입력하세요: abc
# 유효한 숫자가 아닙니다.
# 
# 숫자를 입력하세요: 0
# 0으로 나눌 수 없습니다.

 

위 코드에서는 'ValueError'와 'ZeroDivisionError'를 각각 처리하여 사용자에게 적절한 메세지를 출력합니다.

 

4. 예외 객체 사용

'except' 블록에서 예외 객체를 사용하여 예외에 대한 추가 정보를 얻을 수 있습니다.

 

try:
    number = int(input("숫자를 입력하세요: "))
    result = 10 / number
except Exception as e:
    print(f"예외가 발생했습니다: {e}")

# 출력 결과 예시:
# 숫자를 입력하세요: 0
# 예외가 발생했습니다: division by zero

 

위 코드에서는 'Exception' 객체를 사용하여 발생한 예외의 메세지를 출력합니다.

 

5. 'else'와 'finally' 블록

'else' 블록

'else' 블록은 예외가 발생하지 않았을 때 실행되는 코드 블록입니다.

 

try:
    number = int(input("숫자를 입력하세요: "))
    result = 10 / number
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print(f"결과: {result}")

# 출력 결과 예시:
# 숫자를 입력하세요: 2
# 결과: 5.0

 

위 코드에서는 예외가 발생하지 않으면 'else' 블록이 실행되어 결과를 출력합니다.

'finally' 블록

'finally' 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 리소스 정리(ex. 파일 닫기, 데이터베이스 연결 해제 등)에 사용됩니다.

 

try:
    number = int(input("숫자를 입력하세요: "))
    result = 10 / number
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
finally:
    print("프로그램이 종료되었습니다.")

# 출력 결과 예시:
# 숫자를 입력하세요: 0
# 0으로 나눌 수 없습니다.
# 프로그램이 종료되었습니다.

 

6. 사용자 정의 예외

사용자 정의 예외를 생성하여 특정한 오류 상황을 명확하게 처리할 수 있습니다. 사용자 정의 예외는 기본 'Exception' 클래스를 상속받아 정의합니다.

 

class NegativeNumberError(Exception):
    """음수가 입력되었을 때 발생하는 예외"""
    pass

def check_positive(number):
    if number < 0:
        raise NegativeNumberError("음수는 허용되지 않습니다.")

try:
    number = int(input("양수를 입력하세요: "))
    check_positive(number)
except NegativeNumberError as e:
    print(e)

# 출력 결과 예시:
# 양수를 입력하세요: -5
# 음수는 허용되지 않습니다.

 

위 코드에서는 'NegativeNumberError'라는 사용자 정의 예외를 정의하고, 음수가 입력되면 예외를 발생시킵니다.

 

 

 

파이썬의 예외 처리는 프로그램의 비정상 종료를 방지하고, 안전하고 견고한 코드를 작성하는 데 필수적입니다. 이번 글에서는 기본적인 'try'와 'except' 구조부터 'else', 'finally', 사용자 정의 예외까지 다양한 예외 처리 기법을 이해하고 활용하는 방법에 대해 알아보았습니다. 이상입니다.

댓글