5

您好我想从用户那里得到一个数字,并且只有在一定范围内的输入除外。

以下似乎可行,但我是一个菜鸟,并且认为虽然它有效,但毫无疑问是一个更优雅的例子......只是尽量不要陷入坏习惯!

我注意到的一件事是,当我运行程序时,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")

非常感谢所有帮助。

4

2 回答 2

7

Ctrl+C 引发 a 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块尽可能短。

于 2012-07-21T18:03:24.650 回答
1

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

(1) 最重要的是,只捕获一个通用异常并不是一个好主意,您应该捕获一个您正在寻找的特定try异常,并且通常尽可能少的-block。

(2) 还有,

  if input in range(1,10):

最好编码为

  if 1 <= input < 10:

由于当前函数range()重复创建从 1 到9的值列表,这可能不是您想要或需要的。另外,你想包括价值10吗?您的提示似乎暗示了这一点,因此您需要调整对 的调用range(1, 11),因为生成的列表将包括上限值。并且if- 语句应更改为if 1 <= input <= 10:

于 2012-07-21T18:02:59.117 回答