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

argparse-optparse.md

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

1> **Источник:** https://python-all.ru/3.12/howto/argparse-optparse.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Обновление кода optparse89Изначально модуль [`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) была либо скопирована, либо исправлена обезьяньим патчем, поддерживать обратную совместимость стало непрактично.1011Модуль [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse) улучшает модуль [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) по ряду параметров, в том числе:1213- Обработка позиционных аргументов.14- Поддержка подкоманд.15- Разрешение альтернативных префиксов параметров, например `+` и `/`.16- Обработка аргументов в стиле «ноль или более» и «один или более».17- Формирование более информативных сообщений об использовании.18- Предоставление гораздо более простого интерфейса для пользовательских `type` и `action`.1920Частичный путь перехода с [`optparse`](https://python-all.ru/3.12/library/optparse.html#module-optparse) на [`argparse`](https://python-all.ru/3.12/library/argparse.html#module-argparse):2122- Замените все вызовы [`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).23- Замените `(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`.24- Замените [`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).25- Замените колбэк-действия и аргументы-ключевые слова `callback_*` на аргументы `type` или `action`.26- Замените строковые имена для ключевых аргументов `type` соответствующими объектами типов (например, int, float, complex и т.д.).27- Замените [`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).28- Замените строки с неявными аргументами, такими как `%default` или `%prog`, на стандартный синтаксис Python для использования словарей при форматировании строк, то есть `%(default)s` и `%(prog)s`.29- Замените аргумент `version` конструктора OptionParser на вызов `parser.add_argument('--version', action='version', version='<the version>')`.30