> **Источник:** https://python-all.ru/3.12/howto/argparse-optparse.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

Изначально модуль [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse) пытался сохранять совместимость с [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse). Однако [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) было трудно прозрачно расширять, особенно с изменениями, необходимыми для поддержки спецификаторов `nargs=` и улучшенных сообщений об использовании. Когда бо́льшая часть [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) была либо скопирована, либо исправлена обезьяньим патчем, поддерживать обратную совместимость стало непрактично.

Модуль [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse) улучшает модуль [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) по ряду параметров, в том числе:

- Обработка позиционных аргументов.
- Поддержка подкоманд.
- Разрешение альтернативных префиксов параметров, например `+` и `/`.
- Обработка аргументов в стиле «ноль или более» и «один или более».
- Формирование более информативных сообщений об использовании.
- Предоставление гораздо более простого интерфейса для пользовательских `type` и `action`.

Частичный путь перехода с [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) на [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse):

- Замените все вызовы [`optparse.OptionParser.add_option()`](https://python-all.ru/3.12/library/optparse.html#optparse.OptionParser.add_option) на вызовы [`ArgumentParser.add_argument()`](https://python-all.ru/3.12/library/argparse.html#argparse.ArgumentParser.add_argument).
- Замените `(options, args) = parser.parse_args()` на `args = parser.parse_args()` и добавьте дополнительные вызовы [`ArgumentParser.add_argument()`](https://python-all.ru/3.12/library/argparse.html#argparse.ArgumentParser.add_argument) для позиционных аргументов. Имейте в виду, что то, что ранее называлось `options`, теперь в контексте [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse) называется `args`.
- Замените [`optparse.OptionParser.disable_interspersed_args()`](https://python-all.ru/3.12/library/optparse.html#optparse.OptionParser.disable_interspersed_args), используя [`parse_intermixed_args()`](https://python-all.ru/3.12/library/argparse.html#argparse.ArgumentParser.parse_intermixed_args) вместо [`parse_args()`](https://python-all.ru/3.12/library/argparse.html#argparse.ArgumentParser.parse_args).
- Замените колбэк-действия и аргументы-ключевые слова `callback_*` на аргументы `type` или `action`.
- Замените строковые имена для ключевых аргументов `type` соответствующими объектами типов (например, int, float, complex и т.д.).
- Замените [`optparse.Values`](https://python-all.ru/3.12/library/optparse.html#optparse.Values) на [`Namespace`](https://python-all.ru/3.12/library/argparse.html#argparse.Namespace), а [`optparse.OptionError`](https://python-all.ru/3.12/library/optparse.html#optparse.OptionError) и [`optparse.OptionValueError`](https://python-all.ru/3.12/library/optparse.html#optparse.OptionValueError) на [`ArgumentError`](https://python-all.ru/3.12/library/argparse.html#argparse.ArgumentError).
- Замените строки с неявными аргументами, такими как `%default` или `%prog`, на стандартный синтаксис Python для использования словарей при форматировании строк, то есть `%(default)s` и `%(prog)s`.
- Замените аргумент `version` конструктора OptionParser на вызов `parser.add_argument('--version', action='version', version='<the version>')`.
