我正在尝试捕获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'>]
发布于 2022-06-21 08:19:25
从堆栈跟踪中可以看到,引发的异常不是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
本身都没有文档化。
和BTW,如果您只想抑制异常,您可能希望这样:
from decimal import Decimal, InvalidOperation, getcontext
c = getcontext()
c.traps[InvalidOperation] = False
Decimal('0')/Decimal('0')
https://stackoverflow.com/questions/72690751
复制相似问题