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
구문은 발생할 수 있는 예외를 지정하여 해당 예외가 발생했을 때의 처리를 정의합니다. 예를 들어, FileNotFoundError
와 PermissionError
를 처리할 수 있습니다.
try:
file = open("example.txt", "r")
content = file.read()
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
except PermissionError:
print("파일에 접근할 수 있는 권한이 없습니다.")
이 코드는 파일이 존재하지 않을 때와 권한이 없을 때 각각의 예외를 처리하여 적절한 메시지를 출력합니다.
3. finally
구문
finally
구문은 try
와 except
블록이 끝난 후에 반드시 실행되는 블록입니다. 파일을 열고 닫는 작업처럼 리소스를 해제하거나 정리 작업을 수행하는 데 유용합니다. 예를 들어, 파일을 열었으면 작업이 끝난 후 파일을 반드시 닫아야 합니다.
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
블록에서 사용자 정의 예외를 처리합니다.
에러 코드 및 해결 방법
예외 처리를 하면서 발생할 수 있는 주요 오류 코드와 그 해결 방법을 살펴보겠습니다.
FileNotFoundError
- 오류 코드:
FileNotFoundError
- 원인: 파일 경로가 잘못되었거나 파일이 존재하지 않음.
- 해결 방법: 파일 경로를 확인하고, 파일이 실제로 존재하는지 확인합니다. 경로가 올바른지 검토합니다.
PermissionError
- 오류 코드:
PermissionError
- 원인: 파일이나 디렉토리에 접근할 권한이 없음.
- 해결 방법: 파일이나 디렉토리의 권한을 확인하고 필요한 권한을 부여합니다. 관리자 권한으로 실행해보는 것도 방법입니다.
ZeroDivisionError
- 오류 코드:
ZeroDivisionError
- 원인: 0으로 나누기를 시도함.
- 해결 방법: 나누기 연산 전에 분모가 0이 아닌지 확인합니다.
try:
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
ValueError
- 오류 코드:
ValueError
- 원인: 잘못된 값이 전달됨.
- 해결 방법: 입력 값의 유효성을 검토하고 적절한 값이 입력되었는지 확인합니다.
try:
number = int("abc")
except ValueError:
print("유효하지 않은 값입니다.")
참고문서
'Study Information Technology' 카테고리의 다른 글
Spring Boot와 Apache ActiveMQ 통합하기 (1) | 2024.08.17 |
---|---|
Spring Boot와 Spring Security로 안전한 애플리케이션 구축하기 (0) | 2024.08.17 |
파이썬의 인트로스펙션 프로그램 구조의 동적 검사와 수정 (0) | 2024.08.17 |
Python의 메모리 뷰와 버퍼 프로토콜 효율적인 이진 데이터 처리 (0) | 2024.08.17 |
Python의 로깅 모듈 구현 애플리케이션 추적 및 디버깅 (0) | 2024.08.17 |