In this article we will resolve valueerror: math domain error using Python code examples. This error is generally raised by log() and sqrt() function of Python math library. If you provide any invalid value like -1 or 0 to the log()
function, it will raise the error.
Why this error is raised?
The error says “math domain error” which means there is some issue with domain. In mathematics we have two things – domain and range. Domain is the set of acceptable input values for a function and range is the set of output generated by the function. So, sin()
has range of -1 to 1. Although its domain is any radian value.
In case of log(), 0 and negative numbers can’t be given as input. Understand it this way –
log(x) = y, which is equal to –
x = ey
i.e., y√x = e
Now suppose x = -1, then, y√-1 = e
Root of a negative number is not a real number. This is a problem. The domain, -1, is not appropriate for log(). Same applies for sqrt().
Code Example
Error Code – Let’s first reproduce the error –
import math print(math.log(-1))
This will throw the error –
Traceback (most recent call last): File "/home/jdoodle.py", line 5, in <module> print(math.log(-1)) ValueError: math domain error
Solution
The only solution to this issue is to avoid using invalid domain for math functions. For log() & sqrt() avoid using negative numbers. Use try...except
block to catch exception –
import math print(math.log(5)) try: print(math.log(-1)) except: print("Invalid value in log function")
Output –
1.6094379124341003 Invalid value in log function