Вот хотел написать, что есть же тайпхинтинг и общее движение к типизации. Как раз и вопрос был почему иногда в переменной инт, а в другом случае -- строка. Но потом подумал, что и с хинтами ничего не мешает наделать Optional[int, str, List[Union [str, int, Dict[Any, Optional[int]]]