decimal.InvalidOperation 在 python
decimal.InvalidOperation in python
我正在测试我的代码,我认为这段代码是正确的:
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
,因为它捕获了 所有 可能的异常,包括 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
模块引发的所有信号异常。
我正在测试我的代码,我认为这段代码是正确的:
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
,因为它捕获了 所有 可能的异常,包括 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
模块引发的所有信号异常。