U assertů pozor na to, že se dají vypnout (python -O, PYTHONOPTIMIZE), takže kódem může nakonec proplout úplně jiná výjimka, než AssertionError.
Při čistém stylu programování v Pythonu se "assert" používá jen pro deklaraci podmínek, jejichž pravdivost vyplývá z logické správnosti kódu, nikoli ke kontrole vstupů. V takovém případě AssertionError znamená: "V tomto programu je pravděpodobně něco špatně." To je pak důležitější než, že se to týká chybného typu. Je-li program řádně otestován, už by se AssertionError neměla objevit a proto lze kontrolu vypnout.
To ovšem platí jen za jistých, byť běžně očekávaných podmínek. Python totiž například umožňuje dědičnost skoro u všech typů kromě None, bool (a částečně kromě typing.Final), takže lze udělat např. podtřidu typu int, která má nějakou naprosto neočekávanou vlastnost. (To je podobně neočekávané asi jako arteriální kanylou v tříslech strkat nějakou sondu do srdce. Je dobré takovou věc po použití zase odstranit.)
5. 6. 2020, 10:44 editováno autorem komentáře