Возврат из функции на предыдущую функцию с вводом переменных, как бы она не называлась. Возможно такое сделать в питоне?

Можно ли сделать так чтобы exсept возвращал на ввод функции, из которой он берет переменные. Любой функции, то есть как бы возврат в предыдущую функцию, как бы она не называлась. Возможно такое сделать? #Вместо inp() любая другая функция, и он бы возвращал на ввод переменных.

import math


    def fun(a, b, c):
    
        if a == 0:
            print("a не может быть равно нулю")
            inp()# вместо этого
        try:
            D = b ** 2 - 4 * a * c
        except OverflowError:
            print("Это перебор с цифрами")
            inp()
        except ValueError:
            print("Это не целое или рациональное число")
            inp()
        print("Дискриминант D = %.2f" % D)
        if math.isinf(D) or math.isnan(D):
            print("Габелла, бесконечность - предел(слишком большое число)")
            inp()
        elif 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("Корней нет")
    
    
    def inp():
        print("Введите коэффициенты для уравнения - целые или рациональные числа")
        print("ax^1+bx+c=0")
        a = float(input("a="))
        b = float(input("b="))
        c = float(input("c="))
        fun(a, b, c)
    
    
    inp()

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

Автор решения: Сергей Ш

как пример

import math

def fun(a, b, c):
    if a == 0:
        raise RuntimeError("a не может быть равно нулю")
    D = b ** 2 - 4 * a * c
    print("Дискриминант D = %.2f" % D)
    if math.isinf(D) or math.isnan(D):
        raise RuntimeError("Габелла, бесконечность - предел(слишком большое число)")

    elif 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("Корней нет")


def inp():
    print("Введите коэффициенты для уравнения - целые или рациональные числа")
    print("ax^1+bx+c=0")
    a = float(input("a="))
    b = float(input("b="))
    c = float(input("c="))
    fun(a, b, c)

while True:
    try:
        inp()
    except OverflowError:
        print("Это перебор с цифрами")
        continue
    except ValueError:
        print("Это не целое или рациональное число")
        continue
    except RuntimeError as ex:
        print(ex)
        continue
    break
→ Ссылка