我试图捕获DivisionUndefined错误。但是,我只能捕获父错误InvalidOperation。
from decimal import Decimal, DivisionUndefined
try:
Decimal('0')/Decimal('0')
except DivisionUndefined:
print('spam')
预期输出:
spam
实际输出:
Traceback (most recent call last):
File "C:test.py", line 4, in <module>
Decimal('0')/Decimal('0')
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]
从堆栈跟踪中可以看到,引发的异常不是DivisionUndefined
,而是InvalidOperation
。因此,为了抑制异常,您应该捕获InvalidOperation
:
from decimal import Decimal, InvalidOperation
try:
Decimal('0')/Decimal('0')
except InvalidOperation:
print('spam')
如果您真的只想处理DivisionUndefined
情况,我猜您可以这样做:
from decimal import Decimal, DivisionUndefined, InvalidOperation
try:
Decimal('0')/Decimal('0')
except InvalidOperation as err:
if err.args[0][0] is DivisionUndefined:
print('spam')
else:
raise err
但我不建议这样做,因为err.args
的结构和DivisionUndefined
本身都没有记录。
顺便说一句,如果你只想抑制异常,你可能需要这样:
from decimal import Decimal, InvalidOperation, getcontext
c = getcontext()
c.traps[InvalidOperation] = False
Decimal('0')/Decimal('0')