Python只有在范围内时才输入输出

时间:2012-07-21 17:59:13

标签: python error-handling user-input

您好我想从用户那里获得一个号码,但只能在一定范围内输入。

以下似乎有效,但我是一个菜鸟,并且在它有效的时候会想到一个更优雅的例子......只是尽量不要陷入坏习惯!

我注意到的一件事是,当我运行程序时,CTL + C不会让我脱离循环并引发异常。

while True:
  try:
    input = int(raw_input('Pick a number in range 1-10 >>> '))
    # Check if input is in range
    if input in range(1,10):
      break
    else:
      print 'Out of range. Try again'
  except:
    print ("That's not a number")

所有人都非常感谢。

2 个答案:

答案 0 :(得分:6)

Ctrl + C引发KeyboardInterruptException,您的try … except阻止了这一点:

while True:
   try:
       input = int(raw_input('Pick a number in range 1-10 >>> '))
   except ValueError: # just catch the exceptions you know!
       print 'That\'s not a number!'
   else:
       if 1 <= input < 10: # this is faster
           break
       else:
           print 'Out of range. Try again'

通常,您应该捕获预期发生的异常(因此不会出现副作用,例如您的Ctrl + C问题)。此外,您应该尽可能缩短try … except块。

答案 1 :(得分:1)

您的代码中有几个项目可以改进。

(1)最重要的是,仅仅捕获一般异常并不是一个好主意,你应该捕获一个你正在寻找的特定,并且通常缺少一个try - 尽可能阻止。

(2)此外,

  if input in range(1,10):

最好编码为

  if 1 <= input < 10:

因为当前函数range()重复创建一个从1到 9 的值列表,这可能不是您想要或需要的。此外,您想要 包含 10 吗?您的提示似乎意味着,因此您需要将调用调整为range(1, 11),因为生成的列表包含高范围值。并且if - 语句应更改为if 1 <= input <= 10: