We all have our favorite way of intentionally raising an exception in Python. Some like referencing an undefined variable to get a simple NameError, others might import a module that doesn't exist for a bold ImportError.
But the tasteful exceptioneer knows to reach for that classic computer-confounding conundrum: 1/0 for a satisfyingly descriptive DivisionByZero.
So, when does dividing by 0 not raise DivisionByZero?
Why, when you divide 0 by a Decimal(0), of course!
>>> from decimal import Decimal
>>> Decimal(0) / Decimal(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]
>>> Decimal(1) / Decimal(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.DivisionByZero: [<class 'decimal.DivisionByZero'>]
The numerator type doesn't seem to matter either:
>>> 0 / Decimal(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.InvalidOperation: [<class 'decimal.DivisionUndefined'>]
"InvalidOperation" just doesn't quite have the same ring to it! Well, they can't all be heroes. :)