您好我想从用户那里获得一个号码,但只能在一定范围内输入。
以下似乎有效,但我是一个菜鸟,并且在它有效的时候会想到一个更优雅的例子......只是尽量不要陷入坏习惯!
我注意到的一件事是,当我运行程序时,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")
所有人都非常感谢。
答案 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: