当前位置:  开发笔记 > 编程语言 > 正文

python中的decimal.InvalidOperation

如何解决《python中的decimal.InvalidOperation》经验,为你挑选了1个好方法。

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

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

但事实并非如此,因为当我输入"a"时,这就是我得到的:

File "multiple.py", line 28, in 
  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'

ValueError不会捕获InvalidOperation.我不希望程序停止因为这个,我希望它一直要求输入,直到它满足条件.我该怎么做?



1> Martijn Piet..:

decimal模块中的信号异常都是decimal.DecimalException异常类的子类.您可以捕获以下任何异常来处理InvalidOperation异常,从特定到(非常)泛型:

decimal.InvalidOperation
decimal.DecimalException
ArithmeticError
Exception
BaseException

ValueError不在该层次结构中,但捕获Exception也会捕获,ValueError因为它是一个子类.一般来说,你很少想要捕获,BaseException因为它捕获所有可能的异常,包括SystemExitMemoryError.

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

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模块引发的所有信号异常.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有