检查用户输入是否有效为十进制数?

0 投票
4 回答
6057 浏览
提问于 2025-04-18 08:34

我想确保输入的内容是数字。我尝试过用符号和字母来测试,但系统总是报错,说“无效的十进制文字”。我正在做一个计算器,所以觉得使用十进制模块最合适。提前谢谢你。

这是我的代码:

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

撰写回答