Просто совет: перед тем как углубятся в изучение getopt, обратите внимание на
Click, это высокоуровневая обертка над argparse/optparse (высокоуровневая альтернатива getopt), призванная решать многие из тех проблем, которые в вашем коде решаются вручную, а также многие проблемы, с которыми вы еще скоро столкнетесь при разработке консольных приложений.
В частности откуда взять функцию usage()?
Эта функция должна печатать в консоль что-то о том, как следует правильно вызывать ваш скрипт и с какими параметрами.
Почему такие разные параметры sys.exit() и sys.exit(2)?
Это должно сигнализировать ОС или вызывающему скрипту о том, отработал ли процесс нормально (код возврата == 0, по умолчанию не указывается) или завершился с ошибкой (код возврата > 0).
Какую роль выполняет переменная verbose?
Во многих unix-утилитах режим verbose означает вывод более подробной информации о ходе работы, без него процесс может отработать (штатно, без ошибок) вообще молча без какого-либо вывода. Ваша реализация остается на ваше усмотрение.
Что делает команда assert False ...?
Она должна ставится в точке, до которой по логике интерпретатор не должен дойти при любом раскладе. В данном случае, ИМХО, ее применение необоснованно, правильнее будет просто написать в консоль что-то типа "unhandled option" и выйти по
sys.exit(n)
где
n > 0
.