可能引发两种类型的错误?

Possible to raise two types of errors?

所以我正在尝试制作自己的程序。我让用户输入一个字符串和一个整数(姓名,年龄)。

我想在年龄小于 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)

确实没有必要同时引发两个异常。可以提出您检测到的第一个错误。是的,如果您需要一个字符串但得到了其他东西,则 TypeError 是合适的。您可以检查并在 ValueError 之前或之后加注 TypeError。您可以通过添加更多 except 子句在同一 try 语句中捕获多个异常类型。

另一种选择是使用 assert 语句来验证所有参数。断言表明违规是程序中的错误,您不想使用 try 语句来恢复。

我应该提一下,可以在 Python 中 异常(使用 raise ... from ... 语法),但这在从一个异常转换时使用type to another or for when one exception causes another,这似乎不适用于这种情况。

不要试图一次抛出所有异常,那是毫无意义的,除了适当地混淆用户之外没有任何其他目的。为每个发现的错误抛出一个特定的异常,或者抛出一个包含所有发现的错误的消息的一般异常。