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

파이썬(Python)에서 OverflowError 예외 처리하는 방법

파이썬에서 산술 연산의 결과가 해당 변수 타입이 표현할 수 있는 범위를 초과하면 OverflowError가 발생합니다. 다만 예외 동작은 데이터 타입에 따라 조금씩 다릅니다.

  • 정수(Integer): 일반 정수는 값이 커질 때 필요에 따라 자동으로 long 타입으로 변환되며, long 정수는 값이 증가함에 따라 더 많은 메모리를 동적으로 할당하기 때문에 오버플로우 대신 MemoryError가 발생할 수 있습니다.
  • 부동 소수점(Float): 부동 소수점 연산의 오버플로우 처리는 표준화되어 있지 않으며, 표현 가능한 최대값을 초과하면 OverflowError가 발생합니다.

따라서 큰 수를 다루는 부동 소수점 연산을 수행할 때는 try-except 블록을 사용해 OverflowError를 적절히 처리하는 것이 좋습니다.

예제 코드

아래 코드는 반복적으로 거듭제곱 연산을 수행하다가 오버플로우가 발생하면 이를 잡아서(catch) 처리하는 예제입니다.

i = 1
try:
    f = 3.0 ** i
    for i in range(100):
        print(i, f)
        f = f ** 2
except OverflowError as err:
    print('Overflowed after', f, err)

실행 결과

위 코드를 실행하면 부동 소수점 값이 계속 제곱되다가 표현 한계를 초과하는 시점에 OverflowError가 발생하며, 다음과 같은 출력 결과를 얻습니다.

Floating point values:
0 3.0
1 9.0
2 81.0
3 6561.0
4 43046721.0
5 1.85302018885e+15
6 3.43368382029e+30
7 1.17901845777e+61
8 1.39008452377e+122
9 1.93233498323e+244
Overflowed after 1.93233498323e+244 (34, 'Result too large')

코드 설명

  • f = f ** 2: 매 반복마다 값을 제곱하여 숫자가 기하급수적으로 커집니다.
  • 값이 부동 소수점으로 표현할 수 있는 최대 범위(약 1.8 × 10308)를 넘어서는 순간 OverflowError가 발생합니다.
  • except OverflowError as err: 예외 객체를 err에 담아 오버플로우가 발생한 시점의 값과 에러 메시지('Result too large')를 함께 출력합니다.

이처럼 try-except 구문을 활용하면 프로그램이 비정상 종료되지 않고, 오버플로우 상황을 감지하여 로그를 남기거나 대체 로직을 실행하는 등 안정적인 예외 처리를 할 수 있습니다.