Как использовать Optional, Union и | (PEP 604)?
В современной экосистеме Python работа с альтернативными типами данных стала значительно проще и лаконичнее благодаря развитию стандартов языка. Раньше для обозначения того, что переменная может принимать определенный тип или отсутствовать вовсе, разработчики были вынуждены импортировать специальный класс Optional из модуля typing. Конструкция вида Optional обозначала ровно то же самое, что и объединение Union, где в качестве второго варианта явно указывался тип None.
Начиная с версии Python 3.10, разработчики получили в свое распоряжение революционный синтаксис на базе вертикальной черты, который был описан в официальном предложении PEP
При выборе между старым и новым синтаксисом в современном коде настоящим стандартом де-факто является использование оператора вертикальной черты. Он поддерживается во всех актуальных версиях интерпретатора и выглядит гораздо естественнее для программистов, пришедших из других языков программирования. При этом важно помнить, что само по себе указание типа через объединение не избавляет от необходимости писать защитную логику в коде функции.
Грамотная работа с вариативными типами данных позволяет избежать распространенных ошибок времени выполнения и делает код более устойчивым к неожиданным входным данным от пользователей или внешних API.