728x90
ValueError: math domain error
는 수학 함수에 정의역(domain)에 포함되지 않는 값을 전달했을 때 발생하는 오류입니다. 예를 들어 음수에 대해 math.sqrt()
를 호출하거나, math.log(0)
처럼 로그 함수의 정의되지 않은 구간을 호출하면 이 오류가 발생합니다.
이 오류는 math
모듈의 함수들은 대부분 실수 범위에서 정의된 수학적 제약을 따르기 때문에, 올바르지 않은 값을 인수로 넘길 경우 반드시 예외가 발생합니다. 입력값을 사용할 때는 해당 함수의 수학적 정의역을 반드시 고려해야 합니다.
● 오류 발생 예시
import math
print(math.sqrt(-1))
제곱근 함수는 음수를 입력받을 수 없기 때문에 위 코드는 오류를 발생시킵니다.
ValueError: math domain error
● 대표적인 math domain 오류 사례
math.sqrt(x)
에서x < 0
math.log(x)
에서x <= 0
math.acos(x)
,math.asin(x)
에서x
가 -1~1 범위 초과
● 해결 방법
- 사용 전 입력값이 허용된 범위인지 검사
try-except
문을 사용해 오류에 대비- 복소수 계산이 필요한 경우
cmath
모듈 사용
● 예시 - 복소수로 처리
import cmath
print(cmath.sqrt(-1)) # 출력: 1j
복소수 연산을 지원하는 cmath
모듈을 사용하면 음수의 제곱근도 처리할 수 있습니다.
● 결론
ValueError - math domain error
는 수학 함수에 허용되지 않는 값을 전달할 때 발생합니다. 이러한 오류를 방지하려면 수학 함수의 정의역을 정확히 이해하고, 입력값에 대한 유효성 검사를 수행하는 것이 필수적입니다.
728x90
'프로그래밍언어 > 파이썬[Error]' 카테고리의 다른 글
[파이썬][Error] 039. ValueError - 'x' is not in list (0) | 2025.05.27 |
---|---|
[파이썬][Error] 038. ValueError - int() base must be >= 2 and <= 36 (0) | 2025.05.27 |
[파이썬][Error] 036. ValueError - max() arg is an empty sequence (0) | 2025.05.27 |
[파이썬][Error] 035. ValueError - list.remove(x): x not in list (0) | 2025.05.27 |
[파이썬][Error] 034. ValueError - invalid literal for int() with base 10: 'abc' (0) | 2025.05.27 |