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

argparse-optparse.md

34 строк · 6.2 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.15/howto/argparse-optparse.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Миграция кода с `optparse` на `argparse`89Модуль [`argparse`](https://python-all.ru/3.15/library/argparse.html#module-argparse) предлагает несколько функций более высокого уровня, изначально не предоставляемых модулем [`optparse`](https://python-all.ru/3.15/library/optparse.html#module-optparse), в том числе:1011- Обработка позиционных аргументов.12- Поддержка подкоманд.13- Разрешение альтернативных префиксов параметров, например `+` и `/`.14- Обработка аргументов в стиле «ноль или более» и «один или более».15- Формирование более информативных сообщений об использовании.16- Предоставление гораздо более простого интерфейса для пользовательских `type` и `action`.1718Изначально модуль [`argparse`](https://python-all.ru/3.15/library/argparse.html#module-argparse) пытался поддерживать совместимость с [`optparse`](https://python-all.ru/3.15/library/optparse.html#module-optparse). Однако фундаментальные различия в архитектуре между поддержкой декларативной обработки параметров командной строки (оставляя обработку позиционных аргументов коду приложения) и поддержкой как именованных параметров, так и позиционных аргументов в декларативном интерфейсе привели к тому, что API со временем отошёл от API `optparse`.1920Как описано в [Выбор библиотеки для разбора аргументов](https://python-all.ru/3.15/library/optparse.html#choosing-an-argument-parser), приложения, которые в настоящее время используют [`optparse`](https://python-all.ru/3.15/library/optparse.html#module-optparse) и довольны его работой, могут просто продолжать использовать `optparse`.2122Разработчикам приложений, рассматривающим возможность миграции, также следует ознакомиться со списком внутренних поведенческих различий, описанных в этом разделе, прежде чем решить, желательна ли миграция.2324Для приложений, которые всё же решат перейти с [`optparse`](https://python-all.ru/3.15/library/optparse.html#module-optparse) на [`argparse`](https://python-all.ru/3.15/library/argparse.html#module-argparse), следующие рекомендации могут оказаться полезными:2526- Замените все вызовы [`optparse.OptionParser.add_option()`](https://python-all.ru/3.15/library/optparse.html#optparse.OptionParser.add_option) на вызовы [`ArgumentParser.add_argument()`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentParser.add_argument).27- Замените `(options, args) = parser.parse_args()` на `args = parser.parse_args()` и добавьте дополнительные вызовы [`ArgumentParser.add_argument()`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentParser.add_argument) для позиционных аргументов. Имейте в виду, что то, что ранее называлось `options`, теперь в контексте [`argparse`](https://python-all.ru/3.15/library/argparse.html#module-argparse) называется `args`.28- Замените [`optparse.OptionParser.disable_interspersed_args()`](https://python-all.ru/3.15/library/optparse.html#optparse.OptionParser.disable_interspersed_args), используя [`parse_intermixed_args()`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentParser.parse_intermixed_args) вместо [`parse_args()`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentParser.parse_args).29- Замените колбэк-действия и аргументы-ключевые слова `callback_*` на аргументы `type` или `action`.30- Замените строковые имена для ключевых аргументов `type` соответствующими объектами типов (например, int, float, complex и т.д.).31- Замените [`optparse.Values`](https://python-all.ru/3.15/library/optparse.html#optparse.Values) на [`Namespace`](https://python-all.ru/3.15/library/argparse.html#argparse.Namespace), а [`optparse.OptionError`](https://python-all.ru/3.15/library/optparse.html#optparse.OptionError) и [`optparse.OptionValueError`](https://python-all.ru/3.15/library/optparse.html#optparse.OptionValueError) на [`ArgumentError`](https://python-all.ru/3.15/library/argparse.html#argparse.ArgumentError).32- Замените строки с неявными аргументами, такими как `%default` или `%prog`, на стандартный синтаксис Python для использования словарей при форматировании строк, то есть `%(default)s` и `%(prog)s`.33- Замените аргумент `version` конструктора OptionParser на вызов `parser.add_argument('--version', action='version', version='<the version>')`.34