我正在练习一些简单的问题并使用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()
答案 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.