如何捕获两种不同类型的错误输入

时间:2014-11-01 18:18:06

标签: python exception

我在python 3中编写代码,我需要输出两个不同的字符串,具体取决于输入内容。 它们都是ValueErrors。

try:
    number = False
    while number == False:
        chooseword = int(input("Please enter an integer number (0<=number<10) to choose the word in the list: "))

except ValueError: #empty input
    print("Empty input!")
except ValueError: #non-integer, non-empty input
    print("Input must be an integer!")
else: #do stuff

我已经尝试过这个问题的方法,但我只得到一条打印的消息。 How to catch empty user input using a try and except in python?

我还试图通过使用while循环忽略其中一个选择中的ValueError,并尝试使用try除了块来捕获另一个选项:

empty = True
while empty == True:
    chooseword = int(input("Please enter an integer number (0<=number<10) to choose the word in   the list: "))
    if chooseword = "":
        empty = True

4 个答案:

答案 0 :(得分:2)

由于您正在捕捉ValueError,因此第一个except将始终抓住它。事实上,如果你看一下ValueError int()加注,两种情况都是一样的:

>>> int('')
ValueError: invalid literal for int() with base 10: ''
>>> int('1.2')
ValueError: invalid literal for int() with base 10: '1.2'

如果你想特别抓住空箱子,只需看一下例外:

try:
  word = input("Please enter an integer number (0<=number<10) to choose the word in the list: ")
  word = int(word)
except ValueError as e:
  if not word:
    print("Empty!")
  else:
    print("Invalid!")

答案 1 :(得分:1)

拆分两个错误条件,以便分别处理每个错误:

number = None
while number is None:
    chooseword = input("Please enter an integer number (0<=number<10) to choose the word in the list: ")
    if not chooseword.strip():
        print("Empty input!")
    else:
        try:
            number = int(chooseword)
        except ValueError:
            print("Input must be an integer!")

在这种情况下,chooseword.strip()将从输入中删除任何空白字符,以便将空或全空间输入作为零长度字符串处理。如果提供 输入,则try / except块将捕获任何非整数值。

答案 2 :(得分:0)

由于值错误由其他人解释,您也可以通过此方法执行相同的操作

while True:
    answer = input('Enter a number: ')
    if isinstance(answer,int) and answer in range(0,10):
        do_what_you want()
        break
    else:
        print "wrong Input"
        continue

print answer

instance方法将检查输入是否为int,isinstance将返回True,如果其int为False。如果a介于0-9之间,则返回范围内的答案,否则返回false。

答案 3 :(得分:0)

你可以用这种方式改变python输入函数:

请定义一个新功能,如

else

设置初始值,如

case

在输入的值不是数字之前,请尝试获取数字

def Input(Message):

控制I / O错误等

Value = None

最后,你可以返回你的值,它可以是None或真值。