Что означает ошибка ValueError: math domain error
easy

Что означает ошибка ValueError: math domain error

Не нужно нарушать фундаментальные законы математики

Ситуация: мы пишем программу расчёта математических формул для научного отдела в институте. Логика простая: берём исходные данные, подставляем их в формулу, считаем результат (квадратный корень) и выводим результат.

По идее всё должно пройти успешно, код тоже несложный:

# подключаем модуль для математических вычислений
import math
# готовим переменные для формулы
a = 500
b = 3
c = 0.42
d = 14
# вычисляем предварительные данные
data = (a/d*b-c+(b/c-a)+c)
# считаем квадратный корень
result = math.sqrt(data)
# выводим результат
print(result)

Но при запуске мы получаем ошибку:

❌ ValueError: math domain error

Что означает ошибка ValueError: math domain error

Что это значит: мы попытались выполнить действие, которое выходит за пределы допустимого диапазона вычислений в математике. Проще говоря — попробовали посчитать то, что математически неправильно. 

Когда встречается: в ситуациях, когда операции нарушают какие-то законы вычислений и математики в целом при использовании модуля Math.

Что делать с ошибкой ValueError: math domain error

Интерпретатор указал нам в выводе, что ошибка случилась в команде извлечения квадратного корня. Отсюда можно сделать вывод: единственное, из чего нельзя извлечь корень (с использованием этого модуля и стандартных переменных), — это отрицательное число. И судя по всему, это как раз наш случай.

Чтобы избавиться от ошибки ValueError: math domain error, добавим в код проверку на отрицательное значение перед извлечением корня. Ещё можно добавить обработку исключений, но в таком простом проекте можно и без этого.

Добавляем проверку:

# подключаем модуль для математических вычислений
import math
# готовим переменные для формулы
a = 500
b = 3
c = 0.42
d = 14
# вычисляем предварительные данные
data = (a/d*b-c+(b/c-a)+c)

# добавляем проверку отрицательных значений
if data > 0:
   # считаем квадратный корень
   result = math.sqrt(data)
   # выводим результат
   print(result)
# выводим сообщение об ошибке, если значение отрицательное
else:
   print('Ошибка: отрицательное значение в результатах формулы')

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy