Как я могу напечатать инструкцию print except вместо ошибки ниже в синтаксисе try / except в Python - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в программировании Python. Ниже приведен написанный код, и он отлично работает, когда я печатаю любое число c di git и получаю желаемый результат, как ожидалось, но проблема возникает, когда я ввожу строку (что угодно, кроме целого числа / числа с плавающей запятой) вместо того, чтобы дать мне просто оператор except, он также дает мне ошибку, которой я не хочу. Итак, я хочу, чтобы когда пользователь вводил что-либо, кроме цифр numeri c, ему должно быть предложено сообщение, например: «Недопустимый ввод. Введите число, пожалуйста» вместо ошибки, которую я получаю после оператора except print в конце концов. Пожалуйста, помогите.

hours_string = input("Enter Hours: ")
rate_string = input("Enter Rate: ")
try:
    hours_float = float(hours_string)
    rate_float = float(rate_string)
except:
    print("Invalid input. Enter a number please.")

result = hours_float * rate_float
print("Pay",result)

Это ошибка, которую я получаю. Если я ввожу строку, я просто должен получить оператор except. Вот и все. Никакой другой ошибки. Как мне добраться до sh?

Enter Hours: 9
Enter Rate: entered string by mistake
Invalid input. Enter a number please.
Traceback (most recent call last):
  File "<string>", line 9, in <module>
NameError: name 'rate_float' is not defined

Ответы [ 3 ]

2 голосов
/ 29 мая 2020

Для конкретной ошибки вы можете выполнить конкретное выполнение, как в приведенном ниже коде. Также обратите внимание, что каждый вопрос находится oop в течение некоторого времени, что вам необходимо sh выполнить задачу, прежде чем вы перейдете к следующему.

while True:
    try:
        hours_string = input("Enter Hours: ")
        hours_float = float(hours_string)
    except ValueError:
        print("Invalid input. Enter a number please.")
    else:
        break
while True:        
    try:
        rate_string = input("Enter Rate: ")
        rate_float = float(rate_string)
    except ValueError:
        print("Invalid input. Enter a number please.")
    else:
        break

result = hours_float * rate_float
print("Pay",result)
0 голосов
/ 29 мая 2020

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

def get_input(name, var_type):
  userin = None
  while userin is None:
    userin = input(f'Input {name}: ')
    try:
      userin = var_type(userin)
    except ValueError:
      print(f'{name} must be {str(var_type)}, not {str(type(userin))}')
      userin = None
  return userin


hours = get_input('hours', int)
rate = get_input('rate', float)

result = hours * rate
print('Pay', result)

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

0 голосов
/ 29 мая 2020
hours_float = None
rate_float = None

while hours_float is None:
    hours_string = input("Enter Hours: ")
    try:
        hours_float = float(hours_string)
    except ValueError:
        print("Invalid input. Enter a number please.")

while rate_float is None:
    rate_string = input("Enter Rate: ")
    try:
        rate_float = float(rate_string)
    except ValueError:
        print("Invalid input. Enter a number please.")

result = hours_float * rate_float
print("Pay", result)

В while l oop мы неоднократно просим пользователя ввести данные, пока они не вводят действительное число, отдельно для часов и скорости.

Допустимые изменения ввода первоначально установленное значение None на что-то еще, что завершает соответствующий l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...