Указание обязательности аргумента в argparse Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
В библиотеке argparse обязательные аргументы, начинающиеся с префикса "-", часто относятся к "необязательным", что может вызвать замешательство. Чтобы избежать этого и чётко различать аргументы в справочной информации по программе, можно группировать их методом add_argument_group
. К примеру:
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 и организацией пространства на кухне:
Кухонные принадлежности (🍳): [Лопатка (обязательная), Венчик (необязательный), Миска (необязательная)]
Когда инструменты расположены неправильно:
На стене для необязательных крючков (🪝) висят:
- Лопатка (обязательная) 🪝
- Венчик (необязательный) 🪝
- Миска (необязательная) 🪝
# Ошибка! Argparse повесил ОБЯЗАТЕЛЬНУЮ Лопатку на НЕОБЯЗАТЕЛЬНЫЙ крючок.
Правильная организация пространства с использованием Argparse:
Стена для ОБЯЗАТЕЛЬНЫХ принадлежностей (🔨):
- Лопатка (обязательная) 🔨
Стена для НЕОБЯЗАТЕЛЬНЫХ принадлежностей (🪝):
- Венчик (необязательный) 🪝
- Миска (необязательная) 🪝
# Теперь всё на своих местах! Благодарим, Argparse.
Структура кода должна соответствовать назначению элементов, как в идеально упорядоченной кухне.
Обработка исключений
Бывают ситуации, когда argparse представляет сложности:
- Запись аргумента без префикса указывает на его обязательность, но поступая так, вы теряете удобство именованных параметров.
- Множество обязательных аргументов может замутнить восприятие команд пользователю. Рассмотрите возможность создания дополнительных функций для упрощения процесса.
Практики пользователя: удовлетворенные пользователи – ваша цель
Следование общепринятым практикам сделает использование вашего интерфейса комфортным:
- Используйте наименование, которое точно и ясно отражает суть аргументов, чтобы пользователи могли быстро ориентироваться при работе с вашей программой.
- Каждый раз, когда вы отходите от стандартов argparse, обеспечьте консультацию пользователя с помощью подробного сообщения помощи с использованием
parser.print_help()
.
Пишите для своего будущего 'я': ясный код это важно
Настраивая поведение argparse, учтите следующие принципы:
- Стремитесь к написанию ясного и понятного кода с достаточной документацией, особенно если работаете со сложной настройкой argparse.
- Избегайте безнадежного использования приватных методов, как
parser._action_groups
,лучше их не использовать, поскольку они не гарантированы как часть публичного API и могут быть изменены.
Полезные материалы
- Руководство по Argparse: Детальное руководство по argparse из официальной документации Python.
- API-справочник Argparse: Подробная информация и руководство по API из документации.
- SO: Обязательные аргументы в Argparse: Обсуждение проблемы обязательных аргументов в разделе необязательных на Stack Overflow.
- Полное руководство по Argparse от Real Python: Комплексное руководство по созданию интерфейсов командной строки с использованием argparse.
- Medium: Категории аргументов в Argparse: Статья на Medium, объясняющая разницу между обязательными, необязательными и другими аргументами в argparse.
- Reddit: Параметры в Argparse: Обсуждение на Reddit, посвящённое особенностям необязательных параметров в argparse.
- Урок про Argparse на YouTube: Обширное видео-руководство использования argparse и группировки параметров.