Как условно проверить ValueError в python? - PullRequest
0 голосов
/ 16 мая 2019

Я использовал цикл while True: вместе с операторами try и except для проверки ошибок в программе, которую я сдал для своего университетского задания.Получив оценку, я получил оценку за использование цикла True, поскольку они, по-видимому, «запрещены» и неэффективны при программировании на Python.

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

question = input('How old are you? ')
while True: 
    try: 
        question = int(question)
        break
    except ValueError:
        question = input('Please enter an integer: ')

Примечательно, что я был специально отмечен, потому что я использовал этот метод, включающий while True, для проверки целочисленного ввода.

Это заставляет меня задуматься;Как правильно это сделать?Отзывы моего маркера заставили меня подумать, что я сделал какой-то примитивный метод проверки ошибок, но я никогда не сталкивался с чем-то более прогрессивным.

Если кто-нибудь знает «правильный и правильный путь», гарантирующий, что вход является целым числом, и в то же время отказывается от использования while True, я был бы очень признателен!

1 Ответ

1 голос
/ 16 мая 2019

В этом конкретном случае вы можете отказаться от try-except:

question = input('Please enter an integer.')
while not question.isdigit():
    question = input(f'{question} is not an integer. Please enter an integer.')

question = int(question)

Тем не менее, я бы сказал, что в вашем коде нет ничего плохого, и это на самом делеидиоматично для этой ситуации, по сравнению с этим решением.

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

...