Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42

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

26.05.2022, 08:10. Показов 924. Ответов 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
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
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
2696 / 1602 / 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
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru