When you write programs in Python involving numerical operations you might encounter a “ValueError: math domain error” message. Let us see when it occurs and how to fix it.

Recall that the input to a function is called the “domain” and the output of the function is referred to as the “range”. Thus the math domain error is one where the input to the function is incorrect. Below are common scenarios where this happens.

Taking the square root of a negative number

Consider the following Python program.

The output will be:

We get the dreaded “ValueError: math domain error”. From this message we can conclude that the input to the sqrt function in the math module is incorrect. Here, the problem is that we have input a negative integer to the sqrt() function. If we update it to a positive (or zero) integer, the error will go away.

When this error occurs, it is usually because you have forgotten to consider all possible inputs to a mathematical function. To avoid this type of error, it is important to think about every possible input to a mathematical function before writing code to execute that function. In this manner you can trap the situations where this error can arise in your program.

Note that to obtain the “ValueError: math domain error” it is not sufficient to simply make a “math related” mistake. You must use a function and supply it the wrong kind of input (from what it is expecting). For instance, just trying to divide by zero, like so:

This will yield:

i.e., not quite the math domain error.

Taking the logarithm of a negative number

Similar to the previous example you will get the same math domain error if you attempt to take the logarithm of a negative number like so:

The output is:

because the logarithm of negative numbers is not defined. You will get the same error if you attempt to take the logarithm of zero:

The output is again:

The Math domain error in Python Math.pow()

Similar to the sqrt() example above, we will get the same error if we use the Python Math.pow() function and attempt to take the square root of a negative number by raising it to the power of “0.5”:

The output is:

Fixing the Math domain error

Fixing the Math domain error is quite simple. When you get this error look above the error message to see the exact line where it is happening. Inspect that math function to understand how the input to that function falls outside the normal domain of applicability.

Interested in more things Python? Checkout our post on Python queues. Also see our blogpost on Python's enumerate() capability. Also if you like Python+math content, see our blogpost on Magic Squares. Finally, master the Python print function!

Kodeclik is an online coding academy for kids and teens to learn real world programming. Kids are introduced to coding in a fun and exciting way and are challeged to higher levels with engaging, high quality content.