如何捕获十进制的DivisionUndefined错误



我试图捕获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')

相关内容

  • 没有找到相关文章

最新更新