Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 예외를 수동으로 발생(raise)시키는 방법 완벽 가이드

Python 프로그래밍에서 오류 상황을 명확하게 전달하려면 구체적(specific)인 예외를 발생시키는 것이 중요합니다. 모든 상황에 범용적인 Exception을 사용하기보다는, 문제의 성격에 가장 잘 맞는 예외 생성자를 선택해야 합니다.

그 이유는 간단합니다. 만약 특정 예외를 잡고(catch) 싶은데 그 예외가 너무 일반적이라면, 해당 예외를 상속하는 더 구체적인 모든 하위 예외들까지 함께 처리하게 되어 코드의 의도가 불분명해지기 때문입니다. 따라서 발생시킬 때도 구체적으로, 처리할 때도 동일한 구체적 예외로 다루는 것이 좋은 습관입니다.

1. raise 문으로 예외 발생시키기

예외를 수동으로 발생시키려면 raise 문을 사용합니다. 아래 예제는 문자열을 숫자로 변환하는 과정에서 ValueError가 어떻게 동작하는지 보여줍니다.

예제 코드

import sys

try:
    f = float('Tutorialspoint')
    print(f)
    raise ValueError
except Exception as err:
    print(sys.exc_info())

실행 결과

(<class 'ValueError'>, ValueError("could not convert string to float: 'Tutorialspoint'"), <traceback object at 0x0000000002E33748>)

sys.exc_info()는 현재 처리 중인 예외의 클래스 타입, 예외 인스턴스, 트레이스백 객체를 튜플 형태로 반환합니다. 이를 통해 어떤 예외가 어디서 발생했는지 자세히 확인할 수 있습니다.

2. 인수를 전달하여 예외 발생시키기

raise 문은 단순히 예외 클래스만 지정할 수 있을 뿐 아니라, 예외와 함께 추가 정보를 담은 인수(arguments)를 전달할 수도 있습니다. 이렇게 전달된 값들은 예외 객체의 args 속성에 저장됩니다.

예제 코드

try:
    raise ValueError('foo', 23)
except ValueError as e:
    print(e.args)

실행 결과

('foo', 23)

위 예제에서처럼 여러 개의 값을 튜플 형태로 전달할 수 있으며, 이를 활용하면 오류 메시지나 관련 데이터를 호출부에 풍부하게 전달할 수 있습니다.

정리

  • 예외를 발생시킬 때는 가능한 한 가장 구체적인 예외 클래스를 사용합니다.
  • raise 문 뒤에 예외 클래스 또는 예외 인스턴스를 지정합니다.
  • 인수를 함께 전달하면 e.args를 통해 추가 정보를 확인할 수 있습니다.
  • 발생시킨 구체적 예외를 except 절에서 정확히 일치시켜 처리하는 것이 바람직합니다.