gpt4 book ai didi

python - python 中的 decimal.InvalidOperation

转载 作者:太空狗 更新时间:2023-10-30 01:46:18 26 4
gpt4 key购买 nike

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

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'

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

最佳答案

decimal 模块中的信号异常都是decimal.DecimalException exception class 的子类.您可以捕获以下任何异常来处理 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 模块引发的所有信号异常。

关于python - python 中的 decimal.InvalidOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com