Обработка исключений - Python - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь получить сообщение «INVALID VALUE», когда пользователь не вводит правильные символы, но программа перезапускается без печати сообщения. Вы можете мне помочь?

# Print "Male" when the user types "M" and "Female" when the user types "F"

def m_ou_f():
    mens_erro = "INVALID VALUE"
    while True:
        try:
            sex = str(input("Type M for Male or F for Female: "))
            sex == "M" or sex == "F" or sex == "f" or sex == "m"
        except:
            print(mens_erro)
            continue
        else:
            return sex
            break

while True:
    sex = m_ou_f()
    try:
        sex == "M" or sex == "F" or sex == "f" or sex == "m"
    except:
        print("INVALID VALUE!")
        continue
    else:
        if sex == 'M' or sex == 'm':
            print("Male")
            break
        elif sex == 'F' or sex == 'f':
            print("Female")
            break

Ответы [ 2 ]

0 голосов
/ 10 марта 2020
sex == "M" or sex == "F" or sex == "f" or sex == "m"

Эта строка не будет генерировать исключение - она ​​просто оценивается как «ложь», если введен неправильный символ.

Возможно, вы хотите что-то вроде:

if sex == "M" or sex == "F" or sex == "f" or sex == "m" : raise Exception(mens_erro) 

Что касается второй части - ваша функция не будет возвращать исключение, поэтому нет необходимости помещать его в триггер try:

while True:
    sex = m_ou_f()
    if sex == 'M' or sex == 'm':
        print("Male")
        break
    elif sex == 'F' or sex == 'f':
        print("Female")
        break

Но если вы сделали:

try:
  sex = m_ou_f();
except:
  continue
0 голосов
/ 10 марта 2020

Нет необходимости писать одно и то же дважды.

Оператор try работает следующим образом. [Из Python Документов]

  • Сначала выполняется предложение try (оператор (ы) между ключевым словом try и исключением).

  • Если исключение не возникает, предложение исключается, а выполнение оператора try завершается.

  • Если исключение возникает во время выполнения предложения try, оставшаяся часть предложения пропущен Затем, если его тип соответствует исключению, названному в честь ключевого слова exc, выполняется условие exc, а затем выполнение продолжается после оператора try.

  • Если возникает исключение, которое не соответствует исключению названный в предложении исключением, он передается внешним операторам try; если обработчик не найден, это необработанное исключение, и выполнение останавливается с сообщением, как показано выше.

В вашем случае блок try был успешно выполнен, поэтому он не попадает в кроме блока.

При этом будет напечатано INVALID VALUE!.

while True:
    try:
      sex = str(input("Type M for Male or F for Female: "))
    except ValueError:
      print("INVALID VALUE!")
    if sex == 'M' or sex == 'm':
        print("Male")
        break
    elif sex == 'F' or sex == 'f':
        print("Female")
        break
    else:
      print("INVALID VALUE!")

Дайте мне знать, если мне нужно добавить дополнительные пояснения.

...