За исключением пункта, не выполняющего python - PullRequest
1 голос
/ 04 мая 2020

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

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!')

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Ваш код будет выдавать исключение, только если инструкция в блоке 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()
0 голосов
/ 04 мая 2020

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

Вы можете использовать оператор 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!")

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

...