Документация Python неофициальный перевод

Обновление кода optparseUpgrading optparse code

Изначально модуль argparse пытался сохранять совместимость с optparse. Однако optparse было трудно прозрачно расширять, особенно с изменениями, необходимыми для поддержки спецификаторов nargs= и улучшенных сообщений об использовании. Когда бо́льшая часть optparse была либо скопирована, либо исправлена обезьяньим патчем, поддерживать обратную совместимость стало непрактично.

Модуль argparse улучшает модуль optparse по ряду параметров, в том числе:

  • Обработка позиционных аргументов.

  • Поддержка подкоманд.

  • Разрешение альтернативных префиксов параметров, например + и /.

  • Обработка аргументов в стиле «ноль или более» и «один или более».

  • Формирование более информативных сообщений об использовании.

  • Предоставление гораздо более простого интерфейса для пользовательских type и action.

Частичный путь перехода с optparse на argparse:

  • Замените все вызовы optparse.OptionParser.add_option() на вызовы ArgumentParser.add_argument().

  • Замените (options, args) = parser.parse_args() на args = parser.parse_args() и добавьте дополнительные вызовы ArgumentParser.add_argument() для позиционных аргументов. Имейте в виду, что то, что ранее называлось options, теперь в контексте argparse называется args.

  • Замените optparse.OptionParser.disable_interspersed_args(), используя parse_intermixed_args() вместо parse_args().

  • Замените колбэк-действия и аргументы-ключевые слова callback_* на аргументы type или action.

  • Замените строковые имена для ключевых аргументов type соответствующими объектами типов (например, int, float, complex и т.д.).

  • Замените optparse.Values на Namespace, а optparse.OptionError и optparse.OptionValueError на ArgumentError.

  • Замените строки с неявными аргументами, такими как %default или %prog, на стандартный синтаксис Python для использования словарей при форматировании строк, то есть %(default)s и %(prog)s.

  • Замените аргумент version конструктора OptionParser на вызов parser.add_argument('--version', action='version', version='<the version>').