# Migrating `optparse` code to `argparse`

The `argparse` module offers several higher level features not natively provided by the `optparse` module, including:

- Обробка позиційних аргументів.

- Supporting subcommands.

- Дозволяє альтернативні префікси параметрів, наприклад `+` і `/`.

- Обробка нуля або більше та одного або кількох аргументів стилю.

- Створення більш інформативних повідомлень про використання.

- Забезпечення набагато простішого інтерфейсу для користувацького `типу` і `дії`.

Originally, the `argparse` module attempted to maintain compatibility with `optparse`. However, the fundamental design differences between supporting declarative command line option processing (while leaving positional argument processing to application code), and supporting both named options and positional arguments in the declarative interface mean that the API has diverged from that of `optparse` over time.

As described in Choosing an argument parsing library, applications that are currently using `optparse` and are happy with the way it works can just continue to use `optparse`.

Application developers that are considering migrating should also review the list of intrinsic behavioural differences described in that section before deciding whether or not migration is desirable.

For applications that do choose to migrate from `optparse` to `argparse`, the following suggestions should be helpful:

- Замініть усі виклики `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> ')`.