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

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

26.05.2022, 08:10. Показов 865. Ответов 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 / 4501 / 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
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru