python goto

nafanja
а соответственно предложенный код неопределенно работает!!!
Я плохой знаток Питона, но в данном случае не согласен: работает совершенно определённо.
Если mes задан неправильно, то отрабатывается ветка except и цикл повторяется, если правильно, то печатается результат и цикл прерывается.
Я не беру в расчет случаи, когда вместо целого числа вводится дробь или строка - топикстартер спрашивал не об этом. Я предложил не код, а конструкцию.
Я бы сделал так:
import calendar
while True:
    while True:
        try:
            year = int (input ('Введите год: ')
            break
        except:
            print ('Неверный формат года')

    while True:
        try:
            month = int (input ('Введите месяц: ')
            break
        except:
            print ('Неверный формат месяца')

    try:
        print (calendar.monthrange (year, month))
        break
    except:
        print ('Сочетание Год / месяц неверно')
leonardo19, calendar.monthrange(year, mes) кидает конкретное исключение IllegalMonthError
и тогда твоя конструкция становится определенной
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
leonardo19, calendar.monthrange(year, mes) кидает конкретное исключение IllegalMonthError
и тогда твоя конструкция становится определенной
А мне кажется, что, в конкретном случае, абсолютно без разницы, какое исключение будет перехвачено. Если оно есть, то формат неверный (какая разница, почему) - всё равно надо запрашивать данные заново.
Anton8830, и на любое исключение выводить сообщение "Месяц должен быть больше 0 и меньше 13"???
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja А почему нет? Ну, можно написать так: "Месяц должен быть указан целым числом от 1 до 12" Если задано не число, то из пояснения понятно, что требуется. Если ничего не задано или задана дробь - тоже...
Anton8830, из условия понятно что главным является выявление ошибки в месяце.
leonardo19 привел хорошую конструкцию, я слегка конкретизировал на нужном исключении.
вроде как больше ничего не требовалось из условия проверять.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Ещё вариант:

import calendar
year  = 0
month = 0
while year < 1:
    print ('Input year > 0:')
    try:
        year = int (input ())
    except:
        pritn ('Bad year')

while month not in range (1, 13):
    print ('Input month > 0 and < 13')
    try:
        month = int (input ())
    except:
        print ('Bad month')

print (calendar.monthrange (year, month))
nafanja
Anton8830, из условия понятно что главным является выявление ошибки в месяце.
leonardo19 привел хорошую конструкцию, я слегка конкретизировал на нужном исключении.
Пользователи - они такие... Они месяц могут написать как "Дек" или "december" или ещё как...
А отлов исключения print (calendar.monthrange (year, month)) в данном случае не поможет. Программа вывалится раньше, не дойдя до этой конструкции...
Anton8830
Пользователи - они такие... Они месяц могут написать как "Дек" или "december" или ещё как...
не спорю.
вопрос в другом, а нужен ли был ТС настолько исчерпывающий ответ который ты ему дал?
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.