본문 바로가기

Study Information Technology

Python 예외 처리의 마스터링 try except finally와 사용자 정의 예외

728x90
반응형

Python 예외 처리의 마스터링: try, except, finally와 사용자 정의 예외

Overview

파이썬에서 예외 처리는 프로그램의 안정성과 오류 관리에 매우 중요한 역할을 합니다. 잘못된 코드 실행이나 예기치 못한 오류 상황을 처리하기 위해 try, except, finally 구문을 사용하는 방법과 사용자 정의 예외를 만드는 방법을 자세히 살펴보겠습니다. 이 과정에서는 각각의 예외 처리 구문이 어떻게 작동하는지, 실제 코드 예시와 함께 각 구문의 사용 사례를 설명하고, 오류 코드와 그 해결 방법도 제시하겠습니다.

예외 처리 기본 개념

파이썬에서 예외 처리는 오류가 발생했을 때 프로그램의 흐름을 제어하여 예외 상황에 적절히 대응할 수 있게 해줍니다. try, except, finally 구문을 사용하여 예외를 처리하는 기본적인 방법은 다음과 같습니다.

1. try 구문

try 구문은 예외가 발생할 수 있는 코드를 감싸는 블록입니다. 예외가 발생하지 않으면 try 블록 내의 코드가 정상적으로 실행됩니다. 예를 들어, 파일을 읽는 코드에서 파일이 없거나 권한이 없는 경우 예외가 발생할 수 있습니다.

try:
file = open("example.txt", "r")
content = file.read()
print(content)

위의 코드에서 파일이 존재하지 않거나 읽기 권한이 없으면 예외가 발생할 수 있습니다.

2. except 구문

except 구문은 try 블록에서 예외가 발생했을 때 실행되는 블록입니다. except 구문은 발생할 수 있는 예외를 지정하여 해당 예외가 발생했을 때의 처리를 정의합니다. 예를 들어, FileNotFoundErrorPermissionError를 처리할 수 있습니다.

try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
except PermissionError:
print("파일에 접근할 수 있는 권한이 없습니다.")

이 코드는 파일이 존재하지 않을 때와 권한이 없을 때 각각의 예외를 처리하여 적절한 메시지를 출력합니다.

3. finally 구문

finally 구문은 tryexcept 블록이 끝난 후에 반드시 실행되는 블록입니다. 파일을 열고 닫는 작업처럼 리소스를 해제하거나 정리 작업을 수행하는 데 유용합니다. 예를 들어, 파일을 열었으면 작업이 끝난 후 파일을 반드시 닫아야 합니다.

try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
except PermissionError:
print("파일에 접근할 수 있는 권한이 없습니다.")
finally:
file.close()

위의 코드는 파일을 사용한 후에 finally 블록에서 파일을 닫아 리소스를 해제합니다. finally 블록은 예외 발생 여부와 관계없이 실행됩니다.

사용자 정의 예외

기본적인 예외 처리 외에도, 특정 애플리케이션의 요구에 맞는 사용자 정의 예외를 만드는 것이 가능합니다. 사용자 정의 예외는 Exception 클래스를 상속하여 정의합니다. 이를 통해 보다 세부적인 예외 처리가 가능하고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

사용자 정의 예외 클래스 정의

다음은 사용자 정의 예외 클래스를 정의하는 예제입니다.

class CustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)

CustomError 클래스는 Exception 클래스를 상속받아 생성되며, 초기화 시 message를 받아 예외 메시지를 설정합니다.

사용자 정의 예외 사용

사용자 정의 예외를 사용하는 방법은 다음과 같습니다.

def risky_function(value):
if value < 0:
raise CustomError("값이 음수입니다.")
return value * 2

try:
result = risky_function(-10)
except CustomError as e:
print(f"사용자 정의 예외 발생: {e}")

위의 코드에서 risky_function 함수는 음수 값을 입력받으면 CustomError 예외를 발생시킵니다. try 블록에서 이 함수를 호출하고, except 블록에서 사용자 정의 예외를 처리합니다.

에러 코드 및 해결 방법

예외 처리를 하면서 발생할 수 있는 주요 오류 코드와 그 해결 방법을 살펴보겠습니다.

  1. FileNotFoundError
  • 오류 코드: FileNotFoundError
  • 원인: 파일 경로가 잘못되었거나 파일이 존재하지 않음.
  • 해결 방법: 파일 경로를 확인하고, 파일이 실제로 존재하는지 확인합니다. 경로가 올바른지 검토합니다.
  1. PermissionError
  • 오류 코드: PermissionError
  • 원인: 파일이나 디렉토리에 접근할 권한이 없음.
  • 해결 방법: 파일이나 디렉토리의 권한을 확인하고 필요한 권한을 부여합니다. 관리자 권한으로 실행해보는 것도 방법입니다.
  1. ZeroDivisionError
  • 오류 코드: ZeroDivisionError
  • 원인: 0으로 나누기를 시도함.
  • 해결 방법: 나누기 연산 전에 분모가 0이 아닌지 확인합니다.
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
  1. ValueError
  • 오류 코드: ValueError
  • 원인: 잘못된 값이 전달됨.
  • 해결 방법: 입력 값의 유효성을 검토하고 적절한 값이 입력되었는지 확인합니다.
try:
number = int("abc")
except ValueError:
print("유효하지 않은 값입니다.")

참고문서

728x90
반응형