как отловить в питоне inf, -inf, nan, и запустить код на повтор, чтобы пользователь переписал переменные без переполнения

Я чайник, не понимаю совсем как это сделать. Нужно чтобы код возвращался к стадии записи переменных в случае если D == inf -inf nan, а если он не равен им, то продолжал работу по нахождению иксов. Код также отлавливает ошибки и возвращает к заполнению переменных если ввести строковое или символьное значение.

import math
while True:
    print("Введите коэффициенты для уравнения - целые или рациональные числа(не бесконечно большие(или малые))")
    print("ax^1+bx+c=0")
    try:
        a = float(input("a="))
        b = float(input("b="))
        c = float(input("c="))
    except ValueError:
        print("Это не целое или рациональное число")
        continue
    D = b ** 2-4 * a * c
    print("Дискриминант D = %.2f" % D)

    # if D == float("inf") or float("-inf") or ("nan"):
    #     print("Габелла, переполнение")
    #     continue

    if D > 0:
        x1 = (-b + math.sqrt(D)) / (2 * a)
        x2 = (-b - math.sqrt(D)) / (2 * a)
        print("x1 = %.2f \nx2 = %.2f" % (x1, x2))
    elif D == 0:
        x = -b / (2 * a)
        print("x = %.2f" % x)
    else:
        print("Корней нет")
    break

Ответы (1 шт):

Автор решения: CrazyElf

На основе вашего кода, continue должен вернуть цикл к моменту ввода переменных. А на inf и nan лучше проверять с помощью специальных функций пакета math. Причём функция isinf выдаёт True и на inf и на -inf:

if math.isinf(D) or math.isnan(D):
    print("Габелла, переполнение")
    continue

Как правильно подсказывают в комментарии, проверка if not math.isfinite(D): покрывает сразу все эти варианты.

→ Ссылка