Python 仅在范围内时才输入除外

新手上路,请多包涵

嗨,我想从用户那里得到一个数字,除了一定范围内的输入。

下面的方法似乎可行,但我是菜鸟,我认为虽然它可行,但毫无疑问,这是一个更优雅的例子……只是不想养成坏习惯!

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

非常感谢所有帮助。

原文由 hemmy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 342
2 个回答

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 块尽可能短。

原文由 dav1d 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

(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:

原文由 Levon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题