HOWTO · Python
ZeroDivisionError:Python에서 0으로 플로트 나누기
파이썬에서 제로 나누기 오류를 해결하는 방법을 시연합니다.
이 페이지의 내용
나눗셈에서 제수가 0이면 Python은 ZeroDivisionError를 발생시킵니다. 정수와 실수 모두에서 발생할 수 있으며, 계산 결과 제수가 0이 되는 경우도 포함됩니다. 이 가이드에서는 원인을 설명하고 정수와 실수의 동작을 살펴본 뒤, 결과를 처리하는 두 가지 방법을 소개합니다. 아래 예제에서는 일반 나눗셈, 제수가 0인 경우, 두 가지 처리 방식의 관찰된 결과를 확인할 수 있습니다.
ZeroDivisionError는 왜 발생하나요?
다음 예제를 실행해 보세요:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
print(14 / 2)
7.0
연산에 실패하면 Python은 ZeroDivisionError: division by zero를 보고합니다. 이 예외는 나눗셈 연산자가 발생시키며, 실수 나눗셈에만 해당하는 것은 아닙니다. 정수 제수 0과 실수 제수 0.0 모두 이 예외를 일으킵니다. 다음 독립 실행형 예제에서는 같은 값을 빼서 제수가 0이 됩니다. 예외 처리 코드는 예외의 유형과 메시지를 출력하므로 코드를 실행한 뒤 선택해 복사할 수 있습니다. 관찰된 출력에서는 정수 또는 실수를 0으로 나눌 때 예외 유형과 메시지가 동일하게 나타납니다.
for numerator, divisor in [(17, 8 - 8), (17.0, 8.0 - 8.0)]:
try:
print(numerator / divisor)
except ZeroDivisionError as error:
print(f"{type(error).__name__}: {error}")
ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
제수를 제공하는 식은 변수의 초기값만큼 중요합니다. 계산, 숫자로 변환한 사용자 입력, 또는 이후의 값 변경으로 제수가 0이 될 수 있습니다. 실수라고 해서 0으로 나누는 것이 허용되는 것은 아니며, 예외 메시지가 분자에 문제가 있다는 뜻도 아닙니다. 나눗셈이 실행되는 시점에 /의 오른쪽에 사용되는 값을 확인하세요.
나누기 전에 제수를 확인하세요
0이 예상되는 값이라면 먼저 제수를 검사하고 애플리케이션에 맞는 결과를 선택하세요. 아래 예제에서는 몫을 구할 수 없다는 의미로 None을 사용합니다. 다른 프로그램에서는 계산을 건너뛰거나 메시지를 표시하거나 해당 분야의 규칙에 맞는 대체 처리를 할 수 있습니다. 계산상 의미가 있는 값이 아니라면 임의의 숫자로 대체하지 마세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
numerator = 17
divisor = 8 - 8
if divisor == 0:
quotient = None
else:
quotient = numerator / divisor
print(quotient)
None
이 검사는 제수가 0일 때 나눗셈을 수행하지 않게 합니다. 0이 정상적인 입력일 수 있고 계산 전에 프로그램이 처리 방법을 결정해야 할 때 유용합니다. 제수를 양수 임계값이 아니라 0과 비교하세요. 일반적인 산술에서는 음수 제수도 유효합니다. 검사와 나눗셈 사이에 값이 바뀔 수 있다면 두 연산을 가까이 두거나 해당 연산을 예외 처리로 감싸세요.
try와 except로 나눗셈 처리하기
나눗셈을 시도하는 코드는 try 절에 두고, 일치하는 except 절에서 ZeroDivisionError를 처리하세요. 이 특정 예외만 잡으면 모든 실패를 0으로 나눈 경우처럼 취급하지 않으므로 관련 없는 프로그래밍 오류가 드러납니다. 아래 실행 가능한 예제는 나눗셈이 성공하는 경우와 제수가 0인 경우를 모두 보여 주며, 관찰된 출력도 이어서 제시합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
for divisor in (4, 0):
try:
print(20 / divisor)
except ZeroDivisionError:
print("Cannot divide by zero.")
5.0
Cannot divide by zero.
try와 except 키워드는 Python의 예외 처리 구문을 이루며 메서드가 아닙니다. 예외가 발생할 수 있는 코드는 try 블록 안에 두고, 복구 작업은 이에 대응하는 처리기에 작성하세요. 적절한 복구 방법이 없다면 예외가 호출자에게 전달되도록 두세요.
코드에 맞는 전략을 선택하세요
0이 예상되는 입력이고 올바른 대체 동작을 이미 알고 있다면 나누기 전에 검사하는 방법을 우선 고려하세요. 연산을 시도하는 편이 가장 명확하고 예외 상황에서 유용하게 복구할 수 있다면 try/except ZeroDivisionError를 사용하세요. 어느 방법을 선택하든 오류를 단순히 감추지 말고 계산의 의미를 보존해야 합니다.
두 방법 모두 애플리케이션 전체가 실패하지 않는다고 보장하지는 않습니다. 다른 연산에서 다른 예외가 발생할 수 있고, 대체 결과가 해당 분야의 규칙에 맞지 않을 수도 있습니다. 관련 없는 결함을 숨길 수 있는 단독 except는 피하세요. 기존 오류를 진단 중이라면 제수의 출처를 거슬러 올라가 값을 만든 연산이나 입력을 살펴보세요. 그런 다음 0을 거부할지, 결과를 사용할 수 없음으로 표현할지, 해당 분야의 규칙에 따라 처리할지 결정하세요.