检查用户输入是否有效为十进制数?
我想确保输入的内容是数字。我尝试过用符号和字母来测试,但系统总是报错,说“无效的十进制文字”。我正在做一个计算器,所以觉得使用十进制模块最合适。提前谢谢你。
这是我的代码:
import decimal
while True:
userInput = (raw_input("Enter number:"))
try:
userInput = decimal.Decimal(userInput)
break
except ValueError:
print ("Number please")
我使用的是Python 2.7.6
4 个回答
0
你捕获的异常类型不对。你现在捕获的是一个 值错误(ValueError),但是代码实际上会因为一些无效的小数输入而抛出 decimal.InvalidOperation
这个异常。
>python test.py
Enter number:10
>python test.py
Enter number:10.2
>python test.py
Enter number:asdf
Traceback (most recent call last):
File "test.py", line 6, in <module>
userInput = decimal.Decimal(userInput)
File "C:\Python27\lib\decimal.py", line 548, in __new__
"Invalid literal for Decimal: %r" % value)
File "C:\Python27\lib\decimal.py", line 3872, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: 'asdf'
>python test.py
Enter number:10.23.23
Traceback (most recent call last):
File "test.py", line 6, in <module>
userInput = decimal.Decimal(userInput)
File "C:\Python27\lib\decimal.py", line 548, in __new__
"Invalid literal for Decimal: %r" % value)
File "C:\Python27\lib\decimal.py", line 3872, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: '10.23.23'
把你的 except
这一行改成 except decimal.InvalidOperation:
1
检查一个值是否是有效的Decimal输入的正确方法是:
from decimal import Decimal, DecimalException
try:
Decimal(input_value)
except DecimalException:
pass
https://docs.python.org/2/library/decimal.html#decimal.DecimalException
3
与其捕捉一个 ValueError
错误,不如捕捉一个 decimal.InvalidOperation
错误。当你传入无效数据给 decimal.Decimal
这个构造函数时,就会出现这个错误。
9
捕获 decimal.InvalidOperation 错误
>>> a = 's'
>>> try:
... decimal.Decimal(a)
... except decimal.InvalidOperation:
... print 'fds'
...
fds