Как отфильтровать исключение valueerror только для строковых или плавающих значений - PullRequest
0 голосов
/ 02 февраля 2019

Я делаю школьный проект, и мой учитель спросил меня: «Если пользователь вводит данные типа string или float, должно появиться соответствующее сообщение:

ERROR !! Вставлено значение типа String или CharОШИБКА !! Вставлено значение типа float "

Как я могу это сделать?Между прочим, я не могу любить функции, классы или объекты

Полный вопрос: «Нужны ли инструменты, необходимые для прохождения программы обучения?», «Определить, что такое сома, медицина, общепринятая и значительная школа».. ".

   `min=0
    max=0
    z=1
    soma=0
    media=0
    num1 = int(input("How much values did you want to use: "))
    for i in range(0,num1):
        try:
            n1=int(input("number: "))
        except ValueError:
                print('ERROR!! Inserted a value of type String or Char')
                print('ERROR!! Inserted a value of type float')
                n1=int(input("number: "))
        soma+=n1
        media =soma/num1
        if z==1:
            max = min = n1
            z=2
        else:
            if n1 > max:
                max = n1
            if n1 < min:
                min = n1`

1 Ответ

0 голосов
/ 02 февраля 2019

Поймать ValueError здесь не очень ценно, так как int(1.222) действителен и int('99') также действителен.

A ValueError повышается , когда вы пытаетесь int('1.999'), но для меня это сначала строка, а вторая строка / число с плавающей запятой.

Возможно, вы могли бы ввести цикл while, который ожидает допустимого пользовательского ввода, и проверить пользовательский ввод с помощью isinstance(...).

Пример:

n1 = None

while(n1 is None): 

    user_input = input('Number: ')

    if isinstance(user_input, str): 
        print ('STRING ERROR!')
        continue # restart the loop

    if isinstance(user_input, float): 
        print ('FLOAT ERROR!')
        continue # restart the loop

    try: 
        n1 = int(user_input)
    except ValueError as e:
        # Something crazy happened
        print(e.message)
        continue # restart the loop

# Do the rest of the program

InКроме того, этот цикл while может обрабатывать несколько неудачных входов, тогда как

    try:
        n1=int(input("number: "))
    except ValueError:
            print('ERROR!! Inserted a value of type String or Char')
            print('ERROR!! Inserted a value of type float')
            n1=int(input("number: "))

завершится сбоем, если вы введете «1,999» дважды.

...