Python

Python - 예외 처리

thebasics 2024. 10. 20. 17:00

목차

  1. 예외 처리란 무엇인가?
  2. 예외 처리의 중요성
  3. 예외 처리의 주요 기능
    • try 블록
    • except 블록
    • finally 블록
    • else 블록
  4. 예외 종류 및 예시
  5. 사용자 정의 예외
  6. 예시 코드
  7. 결론
  8. 관련 자료 및 추가 학습 자료

1. 예외 처리란 무엇인가?

예외 처리(Exception Handling)는 프로그램 실행 중 발생하는 오류를 감지하고 처리하여 프로그램의 비정상적인 종료를 방지하는 방법입니다. Python에서는 예외 처리를 통해 예상치 못한 상황을 관리하고, 사용자가 이해할 수 있는 오류 메시지를 제공하며, 필요한 경우 추가 작업을 수행할 수 있습니다. 예외 처리를 통해 프로그램이 안정적으로 실행될 수 있도록 보장합니다.


2. 예외 처리의 중요성

예외 처리의 핵심은 프로그램이 예상하지 못한 상황에 직면했을 때, 그 상황을 처리하고 적절한 조치를 취하는 것입니다. 예외 처리를 제대로 하지 않으면 프로그램이 중단되어 사용자에게 불편을 초래하고 데이터 손실이 발생할 수 있습니다. 예를 들어, 사용자가 입력한 데이터가 예상한 형식이 아닐 경우, 프로그램은 오류를 발생시킵니다. 이러한 오류를 미리 처리하여 사용자에게 친절한 피드백을 제공하고, 프로그램의 연속적인 실행을 보장하는 것이 중요합니다.


3. 예외 처리의 주요 기능

try 블록

  • 설명: try 블록은 예외가 발생할 가능성이 있는 코드를 감싸는 데 사용됩니다. 이 블록 안에서 발생하는 예외를 except 블록에서 처리합니다.
  • 사용법:
    try:
        # 예외가 발생할 가능성이 있는 코드
    except 예외타입:
        # 예외가 발생했을 때 실행되는 코드

except 블록

  • 설명: except 블록은 try 블록에서 예외가 발생했을 때 실행되는 코드를 포함합니다. 특정 예외 타입을 지정하여 해당 예외만 처리하거나, 모든 예외를 처리하도록 작성할 수 있습니다.
  • 사용법:
    try:
        x = 1 / 0
    except ZeroDivisionError:
        print("Cannot divide by zero")
    • 여러 예외 처리:
      try:
          value = int(input("Enter a number: "))
      except ValueError:
          print("Invalid input. Please enter a number.")
      except ZeroDivisionError:
          print("Division by zero is not allowed.")
    • 모든 예외 처리:
      try:
          # 예외가 발생할 수 있는 코드
      except Exception as e:
          print(f"An error occurred: {e}")

finally 블록

  • 설명: finally 블록은 예외 발생 여부에 관계없이 항상 실행되는 코드를 포함합니다. 주로 파일을 닫거나 리소스를 해제하는 등의 작업에 사용됩니다.
  • 사용법:
    try:
        file = open('file.txt', 'r')
        # 파일 작업 수행
    except FileNotFoundError:
        print("File not found.")
    finally:
        file.close()

else 블록

  • 설명: else 블록은 try 블록에서 예외가 발생하지 않았을 때 실행되는 코드를 포함합니다. 예외가 발생하지 않았을 때만 특정 작업을 수행해야 할 경우에 유용합니다.
  • 사용법:
    try:
        result = 10 / 2
    except ZeroDivisionError:
        print("Cannot divide by zero.")
    else:
        print(f"The result is {result}")

4. 예외 종류 및 예시

Python에서 발생할 수 있는 예외에는 여러 가지가 있으며, 몇 가지 일반적인 예외와 그 처리 방법을 살펴보겠습니다.

ZeroDivisionError

  • 설명: 숫자를 0으로 나누려고 할 때 발생하는 예외.
  • 예시:
    try:
        x = 1 / 0
    except ZeroDivisionError:
        print("Cannot divide by zero.")

ValueError

  • 설명: 잘못된 값을 전달받을 때 발생하는 예외.
  • 예시:
    try:
        num = int("abc")
    except ValueError:
        print("Invalid input. Not a number.")

FileNotFoundError

  • 설명: 열려는 파일이 존재하지 않을 때 발생하는 예외.
  • 예시:
    try:
        file = open('non_existent_file.txt', 'r')
    except FileNotFoundError:
        print("File not found.")

TypeError

  • 설명: 연산이나 함수가 잘못된 데이터 타입을 받을 때 발생하는 예외.
  • 예시:
    try:
        result = '2' + 2
    except TypeError:
        print("Type mismatch.")

IndexError

  • 설명: 리스트나 튜플의 인덱스가 범위를 벗어날 때 발생하는 예외.
  • 예시:
    try:
        my_list = [1, 2, 3]
        print(my_list[5])
    except IndexError:
        print("Index out of range.")

5. 사용자 정의 예외

Python에서는 내장 예외뿐만 아니라 사용자가 직접 예외를 정의할 수 있습니다. 사용자 정의 예외를 만들면 특정 상황에 대한 고유한 예외를 처리할 수 있습니다.

사용자 정의 예외 클래스

  • 사용법:

    class CustomError(Exception):
        pass
    
    try:
        raise CustomError("This is a custom error.")
    except CustomError as e:
        print(e)

예시:

  • 특정 조건을 만족하지 않을 때 사용자 정의 예외를 발생시키는 예시입니다.

    class NegativeNumberError(Exception):
        pass
    
    def check_positive(number):
        if number < 0:
            raise NegativeNumberError("Negative numbers are not allowed.")
        return True
    
    try:
        check_positive(-5)
    except NegativeNumberError as e:
        print(e)

6. 예시 코드

기본 예외 처리 예시

try:
    num = int(input("Enter a number: "))
    result = 10 / num
except ValueError:
    print("Please enter a valid number.")
except ZeroDivisionError:
    print("Division by zero is not allowed.")
else:
    print(f"Result is {result}")
finally:
    print("Execution completed.")

파일 처리 예외 처리 예시

try:
    with open('example.txt', 'r') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("The file does not exist.")
except IOError:
    print("Error occurred while reading the file.")
finally:
    print("File operation completed.")

7. 결론

예외 처리는 Python 프로그래밍에서 중요한 부분으로, 프로그램이 예상치 못한 오류 상황에 직면했을 때 어떻게 대처할지 결정합니다. try, except, finally, else를 활용하여 다양한 예외 상황을 처리할 수 있으며, 이를 통해 프로그램의 안정성을 높일 수 있습니다. 또한, 사용자 정의 예외를 통해 고유한 예외 상황에 대한 처리를 정의할 수 있습니다. 이러한 예외 처리를 통해 사용자에게 명확한 피드백을 제공하고 프로그램의 연속성을 유지할 수 있습니다. 예외 처리에 대한 깊은 이해와 활용은 프로그램의 품질과 안정성을 향상시키는 데 핵심적인 역할을 합니다.


8. 관련 자료 및 추가 학습 자료


이 글에서는 Python의 예외 처리에 대해 다루었습니다. try, except, finally, else를 통한 예외 처리 방법과 다양한 예외 유형, 사용자 정의 예외에 대해 살펴보았습니다. 신뢰성 있는 자료와 예제를 통해 예외 처리를 이해하고 활용하여 안정적인 Python 프로그램을 작성해 보시기 바랍니다.

반응형

'Python' 카테고리의 다른 글

Python - 함수 심화  (5) 2024.10.22
Python - 모듈과 패키지  (7) 2024.10.21
Python - 입출력  (8) 2024.09.30
Python - 데이터 구조  (4) 2024.09.29
Python - 기초 문법  (5) 2024.09.28