2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42

Обработка второго исключения в цикле While

26.05.2022, 08:10. Показов 892. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, добрый день!
Подскажите пож-та, возможно ли сделать так, чтобы при возникновении ошибки во втором "try", когда пользователь вводит число за пределами диапазона "а", цикл не начинал обработку с ввода значений для диапазона "а", а также предлагал ввести число от 0 до 100. Т.е. после верного ввода диапазона "а", хотелось бы его "закрыть", чтобы для ввода верного значения в переменной "b" цикл не переходил в самое начало...

Ошибка выглядит так (строка 6):
Python
1
2
3
4
5
6
7
Укажите произвольный набор чисел через запятую: 25,45,6,8,10,65,88,70,3.
<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40
Укажите произвольный набор чисел через запятую: 25,45,6,8,10,65,88,70,3
Введите число от 0 до 100: 2
Нужно ввести число от 3 до 88!
Укажите произвольный набор чисел через запятую: # здесь, по идее, нужно выводить строку:
#Введите число от 0 до 100:
Рабочий код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while True:
    try:
        a = list(map(int, input('Укажите произвольный набор чисел через запятую: ').split(',')))
        # пример последовательности: 25,45,6,8,10,65,88,70,3
        # Если ошибка, будет вызвано исключение:
    except Exception:
        # Цикл будет повторяться до правильного ввода:
        print("<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40")
    else:
        try:
            b = list(map(int, input('Введите число от 0 до 100: ').split(',')))
            if min(list(b)) < min(list(a)) or min(list(b)) > max(list(a)):
                raise ValueError
            # Если ошибка, будет вызвано исключение:
        except ValueError:
            # Цикл будет повторяться до правильного ввода:
            print(f"Нужно ввести число от {min(list(a))} до {max(list(a))}!")
        else:
            array, num = list(map(int, a)), list(map(int, b))
            array.extend(num)
            # print(array)
            break
print(array)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2022, 08:10
Ответы с готовыми решениями:

Обработка исключения в цикле while
В цикле может возникнуть исключение, которое нужно в цикле же обработать и перейти на следующую итерацию этого же цикла. int error = 0; ...

Continue после исключения в цикле
try: f = open('links.txt', 'r') teams = {} for link in f: count -= 1 print(str(count)) ...

Обработка исключения
Каждому студенту необходимо сформулировать задание для решения простейшей задачи, подразумевающей обработку исключения, описанного...

5
148 / 111 / 37
Регистрация: 28.11.2013
Сообщений: 383
26.05.2022, 08:50
вам надо b вводить по другому
Python
1
b = int(input('Введите число от 0 до 100: '))
Добавлено через 11 минут
В цикле сделайте условие:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IsOk = 0
while True:
    If (isOk == 0):
        try:
             ...
        except:
            ...
        else:
            IsOk = 1
 
    try:
         b = ...
    except ValueError:
         ...
    else:
        break
1
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
26.05.2022, 09:15
vbYesNo, как вариант
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def make_arr(txt1='', txt2='', sep_arr=' ', flag=True):
    while flag:
        res = []
        flag = False
        lst = input(txt1).split(sep_arr)
        for d in lst:
            try:
                res.append(int(d))
            except:
                print(txt2)
                flag = True
                break
    return res
                
 
ta1 = f'Укажите произвольный набор чисел через запятую: '
ta2 = f'<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40'
sep_a = ','
a = make_arr(ta1, ta2, sep_a)
print(a)
 
ao = min(a)
an = max(a)
tb1 = f'Введите числа от {ao} до {an} через запятую: '
tb2 = f'Нужно ввести число от {ao} до {an}!'
sep_b = ','
b = make_arr(tb1, ta2, sep_b)
 
while True:
    for num in b:
        if num<ao or num>an:
            print(tb2)
            b = make_arr(tb1, ta2, sep_b)
            break
    else:
        break
print(b)
1
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42
26.05.2022, 12:28  [ТС]
Идея с isOk интересная, но только при неверном вводе чисел, ошибка выходит, но не возвращает к новому вводу, а во втором исключении "теряется" переменная "а" в строке: if min(list(b)) < min(list(a)) or min(list(b)) > max(list(a)): /

Вывод:
Python
1
2
3
4
Укажите произвольный набор чисел через запятую: 25,45,6,8,10,65,88,70,3.
<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40
Введите число от 0 до 100: 55
NameError: name 'a' is not defined
Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
isOk = 0
while True:
    if isOk == 0:
        try:
            a = list(map(int, input('Укажите произвольный набор чисел через запятую: ').split(',')))
            # пример последовательности: 25,45,6,8,10,65,88,70,3
            # Если ошибка, будет вызвано исключение:
        except Exception:
            # Цикл будет повторяться до правильного ввода:
            print("<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40")
        else:
            isOk = 1
    try:
        b = list(map(int, input('Введите число от 0 до 100: ').split(',')))
        if min(list(b)) < min(list(a)) or min(list(b)) > max(list(a)):
            raise ValueError
        # Если ошибка, будет вызвано исключение:
    except ValueError:
        # Цикл будет повторяться до правильного ввода:
        print(f"Нужно ввести число от {min(list(a))} до {max(list(a))}!")
    else:
        array, num = list(map(int, a)), list(map(int, b))
        array.extend(num)
        # print(array)
        break
print(array)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
26.05.2022, 13:32
Лучший ответ Сообщение было отмечено vbYesNo как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while True:
    try:
        a = list(map(int, input("Укажите произвольный набор чисел через запятую: ").split(",")))
    except Exception:
        print("<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40")
    else:
        break
 
while True:
    try:
        b = list(map(int, input('Введите число от 0 до 100: ').split(',')))
        if min(list(b)) < min(list(a)) or min(list(b)) > max(list(a)):
            raise ValueError
    except Exception:
        print(f"Нужно ввести число от {min(list(a))} до {max(list(a))}!")
    else:
        break
 
array, num = list(map(int, a)), list(map(int, b))
array.extend(num)
1
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42
26.05.2022, 13:54  [ТС]
Fudthhh / Ёлки, ведь пробовал также через два цикла While сделать, может с расстановкой Break что-то напутал, ибо не получалось... А так всё логично, когда есть готовое решение... Благодарю всех за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2022, 13:54
Помогаю со студенческими работами здесь

Обработка исключения
Как реализовать конструкцию When...do..., когда неправильно введен входной параметр. Например, месяц определен на домене и пользователь...

Обработка исключения
Всем привет.Нужна помощь Я работаю со структурой. Сразу я создаю файлик и запиливаю туда инфу об 1 человеке. Затем хочу считать в...

Обработка исключения
Как пропускать исключения такого вида? Нужно именно пропускать исключение, а не останавливать. Пытался сделать так, не получилось. ...

обработка исключения
Люди помогите пожалуйста!!! Нужно обработать исключение дубликата первичного ключа, исключение sqlcode -803. Так чтобы не появлялось...

Обработка исключения
Здравствуйте, прошу помощи у опытных программистов! :( Пишу библиотеку на Visual C++. В чем, собственно, проблема: через LoadLibrary я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru