콘텐츠로 건너뛰기

파이썬 커스텀 예외처리 방법 설명: 간편하게 사용하기

[

Python의 사용자 정의 예외 (Python Custom Exception)

Python의 사용자 정의 예외는 코드 안에서 특정 상황에 대한 오류를 표시하는 데 사용됩니다. 사용자 정의 예외를 통해 프로그래머는 자신만의 예외 유형을 정의하고 실수를 방지할 수 있습니다. 이 튜토리얼에서는 Python에서 사용자 정의 예외를 어떻게 작성하고 발생시키는지에 대해 자세히 알아보겠습니다. 또한 사용자 정의 예외를 언제 발생시키는 것이 적합한지, 예외를 조건부로 발생시키고 이전 예외를 다시 발생시키는 방법에 대해 알아보겠습니다.

사용자 정의 예외 발생하기

Python에서 사용자 정의 예외를 발생시키려면 새로운 클래스를 만들어야 합니다. 이 클래스는 Exception 클래스를 상속하여 작성됩니다. 예를 들어, MyException이라는 사용자 정의 예외를 생성하려면 다음과 같이 작성합니다:

class MyException(Exception):
pass

위의 코드에서 MyException 클래스는 Exception 클래스를 상속합니다. 이렇게 하면 MyException 클래스는 Exception 클래스의 모든 속성과 메서드를 상속하게 됩니다.

이제 사용자 정의 예외를 발생시키려면 raise 문을 사용합니다. 예를 들어, 다음과 같이 사용자 정의 예외를 발생시킬 수 있습니다:

raise MyException("This is a custom exception.")

위의 코드에서 raise 문은 MyException 객체를 생성하고 예외를 발생시킵니다. 이때, 예외 메시지를 포함할 수도 있습니다. 예외를 발생시키면 프로그램이 종료되고 해당 예외를 처리하는 코드로 제어 흐름이 전달됩니다.

예외 발생의 선택: 내장 예외 vs 사용자 정의 예외

예외를 발생시킬 때, Python은 여러 가지 내장 예외 중 선택할 수 있습니다. 일반적으로 파이썬에서 이미 정의된 내장 예외를 사용하는 것이 좋습니다. 왜냐하면 내장 예외는 표준 라이브러리에서 지원되기 때문에 널리 알려져 있고 다른 프로그래머들이 이해하기 쉽습니다. 또한 내장 예외를 사용하면 코드의 일관성과 가독성도 향상됩니다.

하지만 때로는 내장 예외로는 특정 상황을 올바르게 처리할 수 없는 경우가 있습니다. 이럴 때는 사용자 정의 예외를 작성하여 특수한 상황을 나타냅니다. 예를 들어, 파일을 열지 못한 경우와 같은 특정한 에러 상황이 발생하는 경우 사용자 정의 예외를 사용할 수 있습니다.

예외 발생 시기 결정하기

예외를 언제 발생시켜야 하는지 결정하는 것은 중요한 부분입니다. 일반적으로 예외는 프로그램의 실행 중에 예기치 않은 상황이 발생한 경우에 발생시키는 것이 좋습니다. 예를 들어, 파일을 읽는 중에 파일이 없는 경우 예외를 발생시킬 수 있습니다.

예외를 발생시키기 전에 이러한 상황을 미리 예측하고 처리할 수 있는 올바른 방법을 찾아보는 것이 좋습니다. 그러나 예외를 발생시키는 것이 더 적절한 경우라면 예외를 발생시키는 것이 일반적으로 권장됩니다.

실제 예외 발생 연습하기

실제로 예외를 발생시키고 처리하는 연습을 해보겠습니다. 다음은 조건부로 예외를 발생시키는 예입니다:

x = 10
if x > 5:
raise ValueError("x should not exceed 5.")

위의 코드에서는 x 변수가 5보다 큰 경우 ValueError 예외를 발생시킵니다.

또한 이전 예외를 다시 발생시킬 수도 있습니다. 예를 들어, 다음과 같이 이전에 발생한 예외를 캡처하고 다시 발생시킬 수 있습니다:

try:
x = 1/0
except ZeroDivisionError as e:
raise ValueError("Cannot divide by zero.") from e

위의 코드에서는 ZeroDivisionError 예외가 발생하면 ValueError 예외를 발생시키고 이전 예외를 연결합니다. 이렇게 하면 후속 예외는 원래 발생한 예외와 함께 추적 정보를 포함하게 됩니다.

예외 발생할 때 최선의 방법 찾기

예외를 발생시킬 때 일부 최선의 관행을 따라야 합니다. 다음은 예외를 발생시킬 때의 최선의 관행입니다:

  • 관련된 내용을 명확하게 표시하는 예외 메시지 작성
  • 예외 클래스에 설명적인 이름 부여
  • 상황에 따라 적절한 내장 예외 사용
  • 사용자 정의 예외를 작성할 때 Exception 클래스를 상속
  • 예외 발생 시 원래 발생한 예외 정보 유지

이러한 관행을 따르면 예외를 처리하기 쉽고 유지보수가 용이한 코드를 작성할 수 있습니다.

assert 문과 예외 발생시키기

또 다른 예외 발생 방법은 assert 문을 사용하는 것입니다. assert 문은 주어진 조건이 True이면 아무 작업도 수행하지 않지만, False이면 AssertionError 예외를 발생시킵니다. 이 방법은 디버깅 목적으로 사용되며 코드의 가정을 테스트하는 데 유용합니다.

예를 들어, 다음과 같이 assert 문을 사용하여 인자가 양수인지 확인하는 함수를 작성할 수 있습니다:

def positive_number(x):
assert x > 0, "Number must be positive."

위의 코드에서는 함수에 전달된 인자 x가 0보다 클 경우 아무런 작업도 수행하지 않지만, 0 이하인 경우 AssertionError 예외를 발생시킵니다.

예외 그룹 발생시키기

때로는 예외 그룹을 발생시켜 여러 예외를 한 번에 처리해야 할 수도 있습니다. Python은 여러 예외를 한꺼번에 발생시킬 수 있는 기능을 제공합니다. 이를 위해 except 문을 사용하여 여러 예외 사이에 ,를 사용하여 예외 그룹을 지정합니다.

예를 들어, 다음과 같이 여러 예외를 한 번에 처리하는 예외 그룹을 발생시킬 수 있습니다:

try:
# 예외 발생 가능한 코드
except (ValueError, TypeError, ZeroDivisionError):
# 예외 처리 코드

위의 코드에서는 ValueError, TypeError, ZeroDivisionError 세 가지 예외를 한 번에 처리합니다. 이렇게 하면 이러한 예외 중 어느 하나가 발생하면 예외 처리 코드 블록이 실행됩니다.

결론

Python에서 사용자 정의 예외를 작성하고 발생시키는 방법에 대해 알아보았습니다. 사용자 정의 예외를 사용하면 프로그램에서 특정 상황을 나타낼 수 있고, 예외 처리를 통해 예외 상황을 적절히 다룰 수 있습니다. 또한 예외를 언제 발생시킬지 결정하는 것이 중요하며, 최상의 관행을 따라야 합니다. 이러한 방법을 따르면 예외 처리 코드를 더 쉽게 작성할 수 있고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.