Возможно ли поднять два типа ошибок? - PullRequest
0 голосов
/ 06 июня 2018

Итак, я экспериментирую с созданием собственной программы.У меня есть пользователь, который вводит строку и целое число (имя, возраст).

Я хочу вызвать Ошибка значения, если возраст меньше 1 (если возраст> 1 :) Я сделал это.Но я не уверен, что делать, если имя не является строкой.Это TypeError и могут ли два типа ошибок возникать одновременно?Если да, то как?

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

Вот код:

# This program asks name how old you are and makes exceptions to check and see if 
there are errors

def hogwarts_express (name, age):

    if age < 1:

        raise ValueError ("Error: Apparently you don't exist.  Please pick a number older 
than 0!")

    if int (age) >= 10:
        print ("Hello {}!  Welcome to the Hogwarts Express, your old enough to go now.  
Here 's your ticket!".format(name))
    else:
        print ("Sorry {} you're not old enough to board the express.".format(name))
try:
    your_name = input("What's your name?  ")
    age = int(input("How old might you be?  "))
    together = hogwarts_express (your_name, age)

except ValueError as err:
    print ("That's not a valid value.  Please input something else.")
    print ("{}".format(err))

else:
    print (together)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

0 голосов
/ 06 июня 2018

Нет необходимости поднимать два исключения одновременно.Можно поднять первую обнаруженную ошибку.Да, TypeError подходит, если вы ожидали строку, но получили что-то еще.Вы можете сделать проверку и поднять TypeError до или после ValueError.Вы можете перехватить несколько типов исключений в одном и том же операторе try, добавив больше предложений except.

Другой вариант - использовать оператор assert для проверки всех аргументов.Утверждение указывает, что нарушение является ошибкой в ​​программе, и вы не хотите восстанавливаться с помощью оператора try.

Я должен упомянуть, что возможно chain исключения в Python (с использованием синтаксиса raise ... from ...), но это используется при переводе из одного типа исключения в другой или когда одно исключение вызывает другой, что, по-видимому, не применимо к этому случаю.

...