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

时间:2018-06-06 01:34:23

标签: python exception raiserror

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

如果年龄小于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 :(得分:1)

不要试图立即抛出所有异常,这只是毫无意义,除了正确混淆用户之外别无其他目的。每次发现错误都会抛出一个特定的异常,或者在包含找到的所有错误的消息中抛出一般异常。

答案 1 :(得分:0)

实际上没有必要同时提出两个例外。提出您检测到的第一个错误是很好的。是的,TypeError是合适的,如果你期望一个字符串,但得到别的东西。您可以在TypeError之前或之后进行检查并提升ValueError。通过添加更多try子句,您可以在同一except语句中捕获多个异常类型。

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

我应该提一下,可以在Python中异常(使用raise ... from ...语法),但这在从一种异常类型转换为另一种异常类型时或在一种异常导致时使用另一个,似乎不适用于这种情况。