В настоящее время я учусь программировать на Python (3.8), и у меня возникла проблема с функцией в моей программе отслеживания бюджета. Предложение исключений не выполняется, когда я набираю другую вещь, кроме «День», «Неделя», «Две недели», «Три недели», «Месяц», «Три месяца», «Полугодие», «Год», «два года», «пять лет», он просто продолжается и продолжает говорить: «Когда вы получаете чистые деньги?» когда я набираю «День», «Неделя» ... он ломается, но я хочу, чтобы предложение исключение выполнялось при возникновении ошибки. Заранее благодарю за ответ на мой вопрос и за повышение эффективности моей работы. Если вы знаете, как сделать лучшую функцию, спросите: «Когда вы получаете чистые деньги?» Напиши это. Извините, если я здесь что-то не так, мой английский не идеален.

class Main:

    def __init__(self):
        self.income_phase = ''

    def income_phase_ask(self):
        while self.income_phase not in ['Day','Week','two weeks','three weeks','Month','three months','half a year','Year','two years','five years']:
            try:
                self.income_phase = input('When do you get net money? (Day; Week; two weeks; three weeks; Month; three months; half a year; Year; two years; piec lat): ')
            except Exception:
                print('Error! Try again!')
1
albertinio 4 Май 2020 в 19:15

2 ответа

Лучший ответ

Ваш код будет выдавать исключение только в том случае, если инструкция в блоке try обнаружит ошибку. Ваш код работает так, что, пока пользователь не введет ожидаемую строку, он будет продолжать спрашивать.

Я бы также посоветовал вам использовать константы для хранения предопределенных значений, таких как список входных данных. Добавление \n в конце вашего сообщения пользователю в приглашении добавит разрыв строки и сделает вещи более читабельными.

Тебе действительно не нужно бросать исключение, на мой взгляд. Но это зависит от вас.

Что вам нужно, это что-то вроде:

class Main:
    VALID_USER_INPUTS = ['Day','Week','two weeks','three weeks','Month','three months','half a year','Year','two years','five years']

    def __init__(self):
        self.income_phase = ''

    def income_phase_ask(self):

      self.income_phase = input('When do you get net money? (Day; Week; two weeks; three weeks; Month; three months; half a year; Year; two years; piec lat): \n')

      if self.income_phase not in self.VALID_USER_INPUTS:
        print('Error! Try again!')
        self.income_phase_ask()
1
Sorix 4 Май 2020 в 16:27

Если пользователь вводит что-то, чего нет в вашем списке, то это не исключение.

Вы можете использовать оператор assert.

Это был бы ваш код:

try:
    assert self.income_phase not in ['Day','Week','two weeks','three weeks','Month','three months','half a year','Year','two years','five years']
except AssertionError:
    self.income_phase = input('When do you get net money? (Day; Week; two weeks; three weeks; Month; three months; half a year; Year; two years; piec lat): ')
else:
    print("Try again!")

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

0
TheMaker 4 Май 2020 в 16:25