Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的decimal.invalidooperation_Python_Python 2.7_Invalidoperationexception - Fatal编程技术网

python中的decimal.invalidooperation

python中的decimal.invalidooperation,python,python-2.7,invalidoperationexception,Python,Python 2.7,Invalidoperationexception,我正在测试我的代码,我认为这段代码是正确的: while True: try: p = Decimal(raw_input(...)) if ...condition... : break else: raise ValueError except ValueError: print "Error! ..." 但事实并非如此,因为当我输入“a”时,我得到的是: File "multiple.py", line 28

我正在测试我的代码,我认为这段代码是正确的:

while True:
    try:
        p = Decimal(raw_input(...))
        if ...condition... : break
        else: raise ValueError
    except ValueError:
        print "Error! ..."
但事实并非如此,因为当我输入“a”时,我得到的是:

File "multiple.py", line 28, in <module>
  precision = Decimal(raw_input(...))
File "/usr/lib/python2.7/decimal.py", line 548, in __new__
  "Invalid literal for Decimal: %r" % value)
File "/usr/lib/python2.7/decimal.py", line 3872, in _raise_error
  raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: 'a'
文件“multiple.py”,第28行,在
精度=十进制(原始输入(…)
文件“/usr/lib/python2.7/decimal.py”,第548行,新__
十进制的无效文本:%r“%value”)
文件“/usr/lib/python2.7/decimal.py”,第3872行,出现错误
提出错误(解释)
decimal.InvalidOperation:十进制的无效文字:“a”
ValueError未捕获InvalidOperation。
我不希望程序因此停止,我希望它继续请求输入,直到满足条件为止。如何操作?

十进制模块中的信号异常都是的子类。您可以捕获以下任何异常来处理
无效操作
异常,从特定异常到(非常)一般异常:

ValueError
不在该层次结构中,但是捕获
Exception
也会捕获
ValueError
,因为它是一个子类。一般来说,您很少希望捕获
BaseException
,因为它捕获所有可能的异常,包括
SystemExit
MemoryError

您可以在同一个处理程序中捕获多个异常:

from decimal import Decimal, DecimalException

while True:
    try:
        p = Decimal(raw_input(...))
        if ...condition... : break
        else: raise ValueError
    except (ValueError, DecimalException):
        print "Error! ..."

将捕获原始的
ValueError
异常,以及
decimal
模块引发的所有信号异常。

您可以尝试捕获
decimal.InvalidOperation
异常…@PM2Ring how<代码>除了十进制。无效操作?@Pigna:是的,你试过了吗?好的,成功了,谢谢!我不知道你也可以进口errors@Pigna:异常只是基于
BaseException
的类。为了特定的目的,您总是可以在该层次结构中定义更多的子类。
from decimal import Decimal, DecimalException

while True:
    try:
        p = Decimal(raw_input(...))
        if ...condition... : break
        else: raise ValueError
    except (ValueError, DecimalException):
        print "Error! ..."