오늘은 개발자라면 중요하게 생각해야하는 코드의 높은 안정성을 위한 예외처리에 대하여 알아보도록 하겠습니다.
어떤 언어든 예외처리하는 방법이 존재하고 비슷한 개념을 가지고 있기에 저는 파이썬의 예외처리를 기본으로 하여
설명드리도록 하겠습니다!
1. 예외 처리는 왜 중요한가? 예외 처리의 중요성
일단 예외처리가 왜 중요한지에 대하여 알아보도록 하겠습니다. 예외처리는 프로그램의 안정성과 신뢰성을 보장하는 핵심적인 요소입니다. 예외는 런타임 도중 발생하는 문제를 나타내는데 이러한 문제가 발생하더라도 프로그램이 비정상적으로 종료되지 않도록 하는것이 중요합니다.
예외가 발생하더라도 개발자가 유도하는 방향으로 정상적 종료가 되어야 추후 작업에 문제가 없고 비정상적으로 종료되어 발생하는 많은 문제를 사전에 예방할 수 있기 때문입니다.
2. 파이썬 예외 처리 키워드
1) try
- 예외가 발생할 가능성이 있는 코드를 포함하는 블록
- 이 블록 내에서 예외가 발생하면 해당 예외가 except 블록으로 이동
2) except
- 예외를 처리하는 부분으로 try 블록에서 예외가 발생했을 때 실행
- 예외의 종류에 따라 다른 except 블록이 선택되거나 특정 예외 클래스를 지정하여 해당 예외만 처리 가능
3) else
- 예외가 발생하지 않았을 때 실행되는 부분
- try 블록에서 예외가 발생하지 않은 경우에만 실행
4) finally
- 예외 발생 여부와 관계없이 항시 실행되는 부분
- 주로 자원 해제 등의 정리 작업에 사용
def divide_numbers(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Error: 0으로 나눌 수 없습니다.")
return None
else:
print("나눗셈 결과:", result)
return result
finally:
print("나눗셈 연산 종료")
# 예시 사용
result1 = divide_numbers(10, 2) # Output: "나눗셈 결과: 5.0", "나눗셈 연산 종료"
result2 = divide_numbers(10, 0) # Output: "Error: 0으로 나눌 수 없습니다.", "나눗셈 연산 종료"
3. 예외의 전파 (Exception Propagation)
예외가 try 블록에서 발생하고 except 블록에서 처리되지 못하면 해당 예외는 상위 코드 블록으로 전파됩니다. 이러한 예외 전파는 프로그램이 예외를 적절히 처리하지 않았을 때 디버깅을 어렵게 만들수 있으므로 조심해야 합니다.
def example_function():
try:
# 어떤 작업 수행
result = 10 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
raise # 예외를 다시 발생시켜 상위 코드로 전파
try:
example_function()
except ZeroDivisionError:
print("상위 코드에서도 예외를 처리합니다.")
4. 사용자 정의 예외
파이썬은 사용자가 직접 예외 클래스를 정의하여 고유한 예외를 발생 시킬 수 있습니다. 이를 통해 프로그램이 특정 상황에 대응하고 메시지를 더욱 명확하게 전달할 수 있습니다.
class NegativeNumberError(ValueError):
"""사용자 정의 예외 클래스: 음수는 처리할 수 없는 오류를 나타냄."""
def __init__(self, value):
self.value = value
def __str__(self):
return f"NegativeNumberError: 음수({self.value})는 처리할 수 없습니다."
def divide_numbers(a, b):
if b < 0:
raise NegativeNumberError(b) # b가 음수인 경우 사용자 정의 예외 발생
try:
result = a / b
except ZeroDivisionError:
print("Error: 0으로 나눌 수 없습니다.")
else:
print("나눗셈 결과:", result)
return result
finally:
print("나눗셈 연산 종료")
# 예시 사용
try:
divide_numbers(10, -2) # Output: NegativeNumberError: 음수(-2)는 처리할 수 없습니다.
except NegativeNumberError as e:
print(e)
위 코드에서 ' NegativeNumberError ' 라는 사용자 정의 예외 클래스는 음수를 처리할 수 없는 경우 발생하는 오류를 처리하기 위해 작성하였습니다. ' divide_numbers ' 에서 b가 음수인 경우 해당 에러가 발생할 수 있도록 raise 키워드를 사용하여 작성하였습니다.
ValueError 이란?
파이썬은 다양한 내장 예외 클래스를 제공하여 프로그래머가 예외를 구분하고, 처리할 때 더욱 명확하고 효과적인 방법을 제공합니다. ValueError는 파이썬에서 값의 타입이나 값 자체의 문제로 발생하는 예외를 나타내는 클래스입니다. 이러한 예외는 주로 잘못된 값을 받았을 때 발생하며, 사용자 정의 예외에서도 이러한 의미와 용도에 맞게 활용할 수 있습니다.
5. 예외 처리의 최적화
예외 처리는 프로그램의 성능에 영향을 미칠 수 있습니다. 예외 처리는 예외 상황이 아닐 때와 동일한 실행 시간이 필요합니다. 때문에 예외 처리하는 방식에 주의하여 퍼포먼스를 고려하여 설계하는 것이 중요하다 생각합니다.
예외 처리는 개발자라면, 프로그래머라면 반드시 이해하고 있어야 하는 중요한 개념이며 주제입니다. 적절한 예외처리를 통해 프로그램의 안정성과 사용성을 향상 시키고 예상치 못한 상황을 대응할 수 있도록 개념을 익혀, 더 견고하고 안정적인 프로그래밍을 할 수 있도록 항시 노력해야 된다고 생각합니다!
'파이썬(python) 기본' 카테고리의 다른 글
파이썬 내장 함수, 표준 라이브러리: 다양한 내장 함수와 라이브러리 (0) | 2023.08.14 |
---|---|
파이썬 컴프리헨션: 컴프리헨션(Comprehension) 이란? (0) | 2023.08.14 |
파이썬 기초: 모듈과 패키지 개념 (0) | 2023.08.07 |
파이썬 효율적인 데이터 처리 : 제너레이터(generator)이란? 제너레이터 표현식 (0) | 2023.08.02 |
파이썬 데이터 처리 : 이터러블(iterable)과 이터레이터(iterator) (0) | 2023.08.02 |