이번 포스팅은 파이썬의 예외처리 방법에 대해 정리하였습니다.
| 예외 처리란?
예외 처리는 프로그램 실행 중에 발생하는 오류를 처리하는 기술입니다.
이를 통해 프로그램이 예기치 않은 상황에 대응하고 조치를 취할 수 있습니다.
모든 프로그래밍 언어에는 예외 처리를 위한 키워드를 제공하고 있습니다.
파이썬에서는 'try', 'except', 'finally' 키워드를 사용하여 예외처리를 구현할 수 있습니다.
| 기본적인 예외 처리 구조
try:
# 예외가 발생할 수 있는 코드 블록
except 예외종류1 as 변수:
# 예외 처리 코드
except 예외종류2 as 변수:
# 다른 종류의 예외 처리 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
finally:
# 예외 발생 여부와 상관없이 항상 실행할 코드
try 블록 안에는 예외가 발생할 가능성이 있는 코드를 넣습니다.
즉, 실행하는 코드를 넣으면 되며 try 블록 안의 코드에서 예외가 발생하면
해당 예외타입과 일치하는 except 블록이 실행됩니다.
except 뒤에는 특정 예외 타입을 명시할 수 있습니다.
특정 예외 발생 시에만 해당 except 블록이 실행되며,
타입을 명시하지 않으면 모든 예외에 except 블록 안의 코드가 실행됩니다.
finally 블록은 선택적으로 사용할 수 있으며, 예외 발생 유무와 관계없이 항상 실행됩니다.
주로 리소스 정리에 사용합니다.
예시) 파일 읽기 모드 코드
try:
f = open('file.txt', 'r')
except FileNotFoundError:
print('파일을 찾을 수 없습니다.')
finally:
f.close()
print('파일을 닫았습니다.')
try 블록에서는 file.txt 파일을 읽기 모드로 열려고 합니다.
만약 해당 파일이 존재하지 않으면 FileNotFoundError가 발생하면서 except 블록이 실행되고,
"파일을 찾을 수 없습니다" 메시지를 출력합니다.
이 예시에서는 파일이 성공적으로 열리든 안 열리든 finally 블록이 실행되어 파일을 닫습니다.
앞서 설명드렸듯이 리소스를 정리하는 파일을 닫아주는 작업을 진행했습니다.
| 주요 내장 예외 클래스
- Exception : 모든 내장 예외의 부모 클래스, 모든 예외는 이 클래스에서 파생
try:
# 예외를 발생시키는 코드
raise Exception("예외 발생!")
except Exception as e:
print("Exception 발생:", e)
- SyntaxError : 잘못된 문법을 사용했을 때 발생
try:
# 잘못된 문법을 포함한 코드
print("Hello world')
except SyntaxError as e:
print("SyntaxError 발생:", e)
- TypeError : 부적절한 형식의 객체에 연산이나 함수 호출이 적용됐을 때 발생
try:
# 부적절한 형식의 객체에 연산이나 함수 호출을 시도하는 코드
x = 10
y = 'abc'
result = x + y
except TypeError as e:
print("TypeError 발생:", e)
- NameError : 정의되지 않은 변수를 사용하려고 할 때 발생
try:
# 정의되지 않은 변수를 사용하는 코드
print(variable)
except NameError as e:
print("NameError 발생:", e)
- ValueError : 올바른 자료형을 가진 인자를 받았지만 값이 적절하지 않을 때 발생
try:
# 올바른 자료형을 가진 인자를 받았지만, 그 값이 적절하지 않은 경우
num = int('abc')
except ValueError as e:
print("ValueError 발생:", e)
그 외에도 여러 가지 내장 예외 클래스가 있습니다.
하지만 보통 Exception을 통해 모든 예외에 대응되게끔 코드 구현을 하는 편입니다.
| 마무리
프로그래밍에서 예외 처리 기능은 프로그램을 더욱 안정적으로 만들어주는 핵심 기능입니다.
유지 보수성을 높일 수 있으므로 프로젝트를 진행할 때 많이 활용해 보세요!
틀린 점이나 질문이 있으시면 댓글로 남겨주세요!
감사합니다!
'Python > Python 정리' 카테고리의 다른 글
Python collections 모듈 : Defaultdict, OrderedDict 이해 (0) | 2024.02.16 |
---|---|
Python 에러 발생 방법 (raise) (0) | 2024.02.15 |
[Python] Descriptor 이해 : 객체 속성 제어의 고급 기능 (0) | 2023.10.04 |
[Python] 코루틴(coroutine) 정리 : Python 동시성 및 비동기 작업 (0) | 2023.10.03 |
[Python] 코딩테스트를 위한 리스트(List) 정리 (0) | 2022.08.08 |