Указание обязательности аргумента в argparse Python

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В библиотеке argparse обязательные аргументы, начинающиеся с префикса "-", часто относятся к "необязательным", что может вызвать замешательство. Чтобы избежать этого и чётко различать аргументы в справочной информации по программе, можно группировать их методом add_argument_group. К примеру:

Python
Скопировать код
import argparse

parser = argparse.ArgumentParser()
group = parser.add_argument_group('обязательные аргументы')
group.add_argument('-r', '--required', required=True, help='Необходимый параметр')
args = parser.parse_args()

Теперь аргумент -r/--required будет правильно отображаться в разделе "обязательные аргументы", что делает справку по программе логичной и воспринимаемой интуитивно.

Дифференциация аргументов на обязательные и необязательные

Чтобы исключить путаницу, связанную с классификацией аргументов в argparse, следуйте нескольким простым правилам:

  • Избегайте помещения обязательных аргументов в стандартную категорию "необязательные". Вы можете это сделать, создавая свои собственные argument_group.
  • Обязательные параметры должны быть выделены в справке, находясь в начале списка
  • Отключите стандартный вывод справки argparse, использовав add_help=False. Так вы избежите автоматического включения справки в список необязательных аргументов.
  • Старайтесь сохранять структуру кода при различных обновлениях, чтобы избежать замешательства у пользователей при нововведениях.

Сортировка аргументов для удобства пользователя

Хорошо структурированное пользовательское сообщение может значительно повысить удобство эксплуатации вашего интерфейса командной строки:

  • Если надо, меняйте порядок аргументов путём использования parser._action_groups.pop() и append().
  • Обязательные аргументы должны быть видны сразу, поэтому уделите внимание их выделению.

Принципы проектирования argparse и назначение флагов

Настройка argparse требует учёта его краеугольных принципов:

  • Название аргументов (с префиксами) вначале принимаются как необязательные. Благодаря этому можно избежать парадокса с "обязательными необязательными" параметрами.
  • В справке об использовании, обязательные аргументы не заключаются в квадратные скобки, помогая визуально отличить их от необязательных.

Визуализация

Можно дать аналогию между argparse и организацией пространства на кухне:

Markdown
Скопировать код
Кухонные принадлежности (🍳): [Лопатка (обязательная), Венчик (необязательный), Миска (необязательная)]

Когда инструменты расположены неправильно:

Markdown
Скопировать код
На стене для необязательных крючков (🪝) висят:
- Лопатка (обязательная) 🪝
- Венчик (необязательный) 🪝
- Миска (необязательная) 🪝
# Ошибка! Argparse повесил ОБЯЗАТЕЛЬНУЮ Лопатку на НЕОБЯЗАТЕЛЬНЫЙ крючок.

Правильная организация пространства с использованием Argparse:

Markdown
Скопировать код
Стена для ОБЯЗАТЕЛЬНЫХ принадлежностей (🔨):
- Лопатка (обязательная) 🔨

Стена для НЕОБЯЗАТЕЛЬНЫХ принадлежностей (🪝):
- Венчик (необязательный) 🪝
- Миска (необязательная) 🪝
# Теперь всё на своих местах! Благодарим, Argparse.

Структура кода должна соответствовать назначению элементов, как в идеально упорядоченной кухне.

Обработка исключений

Бывают ситуации, когда argparse представляет сложности:

  • Запись аргумента без префикса указывает на его обязательность, но поступая так, вы теряете удобство именованных параметров.
  • Множество обязательных аргументов может замутнить восприятие команд пользователю. Рассмотрите возможность создания дополнительных функций для упрощения процесса.

Практики пользователя: удовлетворенные пользователи – ваша цель

Следование общепринятым практикам сделает использование вашего интерфейса комфортным:

  • Используйте наименование, которое точно и ясно отражает суть аргументов, чтобы пользователи могли быстро ориентироваться при работе с вашей программой.
  • Каждый раз, когда вы отходите от стандартов argparse, обеспечьте консультацию пользователя с помощью подробного сообщения помощи с использованием parser.print_help().

Пишите для своего будущего 'я': ясный код это важно

Настраивая поведение argparse, учтите следующие принципы:

  • Стремитесь к написанию ясного и понятного кода с достаточной документацией, особенно если работаете со сложной настройкой argparse.
  • Избегайте безнадежного использования приватных методов, как parser._action_groups,лучше их не использовать, поскольку они не гарантированы как часть публичного API и могут быть изменены.

Полезные материалы

  1. Руководство по Argparse: Детальное руководство по argparse из официальной документации Python.
  2. API-справочник Argparse: Подробная информация и руководство по API из документации.
  3. SO: Обязательные аргументы в Argparse: Обсуждение проблемы обязательных аргументов в разделе необязательных на Stack Overflow.
  4. Полное руководство по Argparse от Real Python: Комплексное руководство по созданию интерфейсов командной строки с использованием argparse.
  5. Medium: Категории аргументов в Argparse: Статья на Medium, объясняющая разницу между обязательными, необязательными и другими аргументами в argparse.
  6. Reddit: Параметры в Argparse: Обсуждение на Reddit, посвящённое особенностям необязательных параметров в argparse.
  7. Урок про Argparse на YouTube: Обширное видео-руководство использования argparse и группировки параметров.