Как выполнить итерацию для l oop с обработкой ошибок - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь отловить ошибки ввода от пользователя. Вход должен быть с плавающей точкой. Не могу понять лог c.

Я хочу, чтобы пользователь перенаправлялся на то же значение ключа в material_vars, если они вводят неверный ввод. В настоящее время я могу заставить его работать, поэтому, если он неправильно, он возвращается к первому вводу ключа, а не к ключу, на котором произошла недопустимая запись.

def material_costs(update=False):

    global material_vars

    while update:

        try:
            for key in material_vars:
                material_vars[key] = float(input(f"Enter {key}:\n"))
        except ValueError:
            print ('Please enter a valid input')
        else:
            save_defaults('material_vars', material_vars)
            update = False

    else:
        material_vars = open_defaults('material_vars')
    return material_vars

1 Ответ

1 голос
/ 08 мая 2020

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

def material_costs(update=False):
    global material_vars
    while update:
        for key in material_vars:
            correct = False
            while (not correct):
                try:
                    material_vars[key] = float(input(f"Enter {key}:\n"))
                    correct = True
                except ValueError:
                    print ('Please enter a valid input')
                    correct = False
        save_defaults('material_vars', material_vars)
        update = False
    else:
        material_vars = open_defaults('material_vars')
    return material_vars

Выполните некоторое время l oop для каждого ввода, пока пользователь не введет правильный ввод. Ввод будет проверяться блоками try-except внутри while.

Надеюсь, это поможет.

...