파이썬 예외처리 try except 활용법
파이썬 예외 처리의 중요성과 기본 구조
프로그래밍을 하다 보면 예기치 못한 오류나 예외를 마주하게 되기 마련입니다. 이러한 상황이 발생할 경우, 프로그램이 갑작스럽게 종료되는 것은 사용자에게 불편을 초래할 수 있습니다. 그래서 예외 처리(Exception Handling)가 매우 중요합니다. 파이썬에서는 try
와 except
문을 통해 이러한 예외를 효과적으로 관리할 수 있습니다.

예외 처리의 구성 요소
파이썬의 예외 처리는 여러 구성 요소로 이루어져 있습니다. 이를 통해 다양한 예외를 유연하게 관리할 수 있습니다.
- try 블록: 예외가 발생할 가능성이 있는 코드를 감싸는 부분입니다.
- except 블록: try 블록 내에서 예외가 발생했을 때 실행되는 코드입니다. 여러 개의 except 블록을 사용하여 다양한 예외에 대한 처리를 할 수 있습니다.
- else 블록: 예외가 발생하지 않았을 때 실행되는 블록입니다. 선택적으로 사용할 수 있습니다.
- finally 블록: 예외 발생 여부와 관계없이 항상 실행되는 코드를 포함합니다. 자원 해제와 같은 정리 작업에 종종 사용됩니다.
주요 예외 클래스
파이썬에서는 많은 종류의 예외 클래스가 존재하여 다양한 오류를 관리할 수 있습니다. 다음은 자주 활용되는 주요 예외 클래스입니다:
- Exception: 모든 내장 예외의 기본 클래스입니다.
- ArithmeticError: 수치 연산에서 발생하는 오류의 기본 클래스입니다.
- ZeroDivisionError: 0으로 나누려 할 때 발생하는 오류입니다.
- ValueError: 올바른 유형의 값을 받았으나 유효하지 않을 경우 발생합니다.
- TypeError: 함수나 연산에 잘못된 데이터 유형이 사용될 때 발생합니다.
예외 처리 구문 및 활용 예시
예외 처리를 보다 이해하기 쉽게 하기 위해, 구체적인 예제를 살펴보겠습니다. 아래 코드는 나누기 연산을 수행하면서 발생할 수 있는 예외를 처리하는 방식입니다.
try:
value = int(input("정수를 입력하세요: "))
result = 10 / value
except ZeroDivisionError:
print("0으로 나눌 수 없습니다!")
except ValueError:
print("유효한 정수를 입력해 주세요.")
except Exception as e:
print(f"예상치 못한 예외가 발생했습니다: {e}")
else:
print(f"결과는 {result}입니다.")
finally:
print("프로그램 종료.")
위의 코드에서 try
블록 내에서 사용자로부터 정수를 입력받고, 이를 통해 나누기 연산을 수행합니다. 만약 사용자가 0을 입력할 경우, ZeroDivisionError
가 발생하게 되고 해당 예외에 대한 처리 코드가 실행됩니다. 이와 함께 ValueError
를 통해 입력값 검증도 가능하며, 예상치 못한 오류가 발생했을 경우에는 통상적인 Exception
클래스를 활용하여 처리할 수 있습니다.
사용자 정의 예외 클래스 만들기
사용자 정의 예외를 생성하여 특정 조건에 대한 예외 상황을 더 세밀하게 처리할 수 있습니다. 이를 위해 Exception
클래스를 상속받아 새로운 클래스를 정의합니다.
class MyCustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
raise MyCustomError("이것은 사용자 정의 예외입니다.")
except MyCustomError as e:
print(f"예외 발생: {e}")
위 예제처럼 raise
문을 사용하여 특정 조건을 충족하지 않을 때 예외를 발생시키고, 이를 적절히 처리할 수 있습니다. 사용자 정의 예외는 프로그램의 가독성을 높이고, 각 예외에 대해 구체적인 메시지를 제공함으로써 디버깅 과정을 더 원활하게 합니다.
예외 체인 활용하기
파이썬에서는 예외를 다시 발생시켜 예외 체인을 만들 수 있습니다. 이를 통해 원인 예외를 추적할 수 있으며, 프로그램의 안정성을 더욱 향상시킬 수 있습니다.
try:
try:
value = int(input("정수를 입력하세요: "))
result = 10 / value
except ZeroDivisionError as e:
raise MyCustomError("내부 블록에서 0으로 나누기 발생") from e
except MyCustomError as e:
print(f"사용자 정의 예외 발생: {e}")
print(f"원래 예외: {e.__cause__}")
위의 예제에서는 내부 try
블록에서 0으로 나눌 경우 MyCustomError
를 발생시키고, 이를 활용하여 원인 예외를 추적합니다. 이렇게 함으로써 사용자에게 더 명확한 예외 메시지를 전달할 수 있습니다.

마무리하며
프로그래밍에서 예외 처리는 필수적인 요소입니다. 예외가 발생하더라도 프로그램이 비정상적으로 종료되지 않고 사용자에게 유용한 피드백을 제공하여 신뢰성을 높여 줍니다. 파이썬의 try
와 except
문을 활용한 예외 처리는 이를 가능하게 해줍니다. 이러한 개념을 이해하고 실제 코드에 적용함으로써 더 나은 프로그래밍 경험을 할 수 있습니다.
자주 물으시는 질문
파이썬에서 예외 처리는 왜 중요한가요?
프로그래밍을 하다 보면 예상치 못한 오류가 발생할 수 있습니다. 예외 처리는 이러한 오류로 인해 프로그램이 중단되지 않도록 하고 사용자에게 적절한 피드백을 제공하는 역할을 합니다.
파이썬에서 예외를 어떻게 처리하나요?
파이썬에서는 주로 try
와 except
문을 사용하여 예외를 처리합니다. try
블록 내의 코드에서 오류가 발생하면, 해당 오류를 처리하기 위해 대응하는 except
블록이 실행됩니다.
사용자 정의 예외란 무엇인가요?
사용자 정의 예외는 특정 상황에 맞춰 개발자가 만든 예외 클래스입니다. 이를 통해 프로그램에서 발생하는 특정 오류 상황을 보다 세밀하게 관리하고, 필요에 따라 적절한 메시지를 제공할 수 있습니다.