尝试&字符串和整数的例外

时间:2016-01-17 02:57:00

标签: python exception-handling

我正在练习一些简单的问题并使用try和exception,我在下面做了一个我要引发异常的情况,如果输入int而不是str,它似乎永远不会引发异常。当我以相反的方式执行它并且想要在输入str而不是int时引发异常它虽然工作正常,但我在这里做错了什么?我应该在第一个问题而不是ValueError中引发一个不同的异常吗?

def is_vowel():

    vws = 'aeiou'

    try:
        x = str(raw_input("Please enter a single letter: "))
        for i in vws:
            if x == i:
                print x +" is a vowel"

    except ValueError:
        print "Error message here"


is_vowel()

下面的这个可以像预期的那样工作

def is_int():

    ints = [1,2,3,4]

    try:
        y = int(raw_input("Please enter a single number"))
        for i in ints:
            if y == i:
                print str(y) + " is a number"

    except ValueError:
        print "Please enter a number only"
is_int()

2 个答案:

答案 0 :(得分:1)

以这种方式思考:代表字符的字节序列' 1'那么' 2'那么' 3'可以解释为字符串(" 123")或整数(123)。因此,获取任何有效整数的输入,并将其视为字符串,将会成功。

另一方面,字节序列" 123"可以转换为数字,但字节序列" xyzzy"不能。所以,如果你试图转换" xyzzy"到整数,你会得到一个ValueError。

答案 1 :(得分:1)

因为raw_input会将您的输入作为字符串返回到str,这不会导致任何错误。但是,int只能将数字格式字符串传输到整数。

raw_input(...)
raw_input([prompt]) -> string

Read a string from standard input.