[Python] 예외 처리 (try, exept, else, finally)
예외처리는 프로그램 실행 중 발생할 수 있는 오류나 예외 상황에 대응하기 위한
파이썬의 매커니즘
예외 처리는 코드의 안정성과 신뢰성을 향상시키는데 도움이 되며,
예외 처리를 통해 오류에 대응하는 코드를 작성하여 예외 상황에서
프로그램이 비정상적으로 종료되지 않도록 할 수 있음
'try' - 'except'
파이썬에서 예외처리는 'try' - 'except' 문을 사용하여 수행
'try' 블록에는 예외가 발생 할 가능성이 있는 코드를 작성
'except' 블록에는 발생한 예외에 대한 처리를 작성
try:
# 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
# 예외가 발생했을 때 실행될 코드
예를 들어, 다음과 같이 0으로 나누는 경우에 대한 예외처리를 할 수 있음
try:
result = 10 / 0
except ZeroDivisionError as e:
print("0으로 나눌 수 없습니다:", e)
try 블록에 있는 연산에서 예외가 발생하면, except 블록으로 제어가 이동하고,
예외에 대한 처리를 할 수 있음
예외 처리 종류는 Python 내장 예외 클래스들에 의해 정의되는데,
몇 가지 일반적인 내장 예외 클래스는 다음과 같음
클래스 | 설명 |
Exception | 기본 클래스 |
TypeError | 잘못된 형식으로 연산이나 함수를 호출할 때 발생 |
ValueError | 올바른 형식을 가진 값이 아닌 경우 발생 |
NameError | 정의되지 않은 변수를 사용하려고 할 때 발생 |
ZeroDivisionError | 0으로 나누기 연산을 수행하려고 할 때 발생 |
FileNotFoundError | 파일을 찾을 수 없을 때 발생 |
IndexError | 인덱스 범위를 벗어난 원소에 접근하려고 할 때 발생 |
KeyError | 사전에서 존재하지 않는 키를 사용하려고 할 때 발생 |
AssertionError | assert 문이 실패할 때 발생 |
IOError | 입출력 작업 중에 오류가 발생했을 때 발생 |
AttributeError | 객체가 속성이나 메서드를 갖고 있지 않을 때 발생 |
ImportError | 모듈을 가져올 수 없거나 잘못된 모듈을 가져왔을 때 발생 |
KeyboardInterrupt | 사용자가 프로그램 실행을 중지시키는 키 인터럽트를 입력했을 때 발생 |
이 외에도 많은 내장 클래스가 있으며, 필요에 따라 사용자 정의 예외 클래스를 만들어서 사용 가능
사용자 정의 예외 처리
사용자 정의 예외 처리를 만들기 위한 과정은 다음과 같음
1. 예외 클래스를 정의하고, 필요한 속성과 메서드를 추가
2. 기존의 내장 예외 클래스 중 하나를 상속받아 사용자 정의 예외 클래스를 만듦
3. 필요에 따라 추가적인 메서드를 정의하거나 상속받은 메서드를 재정의
다음은 간단한 사용자 정의 예외 처리의 예
class DatabaseConnectionError(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return f"Database Connection Error: {self.message}"
위의 예제는 DatabaseConnectionError 이라는 예외 클래스를 정의
Exception 클래스를 상속받아 만들어짐
위 예제를 통해 데이터베이스 연결 과정에서 발생하는 오류를 처리할 수 있음
try:
# 데이터베이스 연결 시도
connect_to_database()
except DatabaseConnectionError as e:
print(e)
만약 데이터베이스 연결 과정에서 오류가 발생하면, 정의해둔 예외가 발생하고
오류 메시지를 출력한 후 오류 처리 로직을 수행할 수 있음
'try' - 'except' - 'else' - 'finally'
사실 파이썬의 예외처리는 위에서 설명한 2가지말고 2가지가 더 있음
모든 예외 처리를 사용 할 필요는 없으며 상황에 맞게 적절하게 사용하면 됨
다음은 4가지 예외 처리의 사용법
try:
# 예외가 발생할 가능성이 있는 코드
except 예외종류 as 예외변수:
# 예외가 발생했을 때 실행될 코드
else:
# 예외가 발생하지 않았을 때 실행될 코드
finally:
# 항상 실행되는 코드
try블록의 코드가 정상적으로 실행되는 경우 else 블록이 실행되고,
예외가 발생하면 except 블록의 코드가 실행 됨
finally 블록은 예외 발생 여부에 상관없이 항상 실행되는 코드로,
예외 처리 이후에 정리 작업을 수행하는 데 사용 될 수 있음
다음은 'try' - 'except' - 'else' - 'finally' 문을 사용한 예제
try:
# 파일 열기 시도
file = open("example.txt", "r")
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
else:
# 파일 내용 읽기
content = file.read()
print(content)
file.close()
finally:
print("예외 처리 완료")
위 예제는 try 블록에서 파일을 열려고 시도하고, 파일이 없는 경우에 FileNotFoundError 예외가 발생
파일이 정상적으로 열리는 경우엔, else 블록에서 파일내용을 읽고 출력
finally 블록에서는 예외 처리가 완료되었음을 알리는 메시지를 출력
'👩💻 Develope > Python' 카테고리의 다른 글
[Python] 시간 지난 파일 자동 삭제 (0) | 2023.06.30 |
---|---|
[Python] re 모듈 사용법 (0) | 2023.06.14 |
[Pandas] 데이터 프레임 컬럼 순서 바꾸기 (0) | 2023.05.27 |
[Pandas] 데이터 프레임에서 suffix를 prefix로 바꾸기 (0) | 2023.05.23 |
[Python] 정규 표현식 (1) | 2023.05.10 |