Автовывод сообщения с argparse в Python без аргументов

Пройдите тест, узнайте какой профессии подходите

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

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

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

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

class ArgumentParserError(Exception): pass

class EnhancedArgParser(argparse.ArgumentParser):
    def error(self, message):
        self.print_help()
        raise ArgumentParserError(message)

parser = EnhancedArgParser()
parser.add_argument('action', help='обязательное действие')

try:
    args = parser.parse_args(sys.argv[1:]) or parser.error("Аргументы не были заданы! 🙀")
except ArgumentParserError:
    sys.exit(2)  # Завершение работы скрипта с выводом сообщения о том, что процесс не был завершен корректно.

Этот пример демонстрирует создание кастомного парсера, используя наследование от argparse.ArgumentParser. Вставляется специальное исключение для случаев, когда не заданы аргументы. Блок try-except гарантирует, что сообщение помощи будет отображено корректно и что программа будет безошибочно завершена.

Кинга Идем в IT: пошаговый план для смены профессии

Проработка принципа работы: argparse и обработка ошибок

Предположения argparse

Модуль argparse ожидает хотя бы одного аргумента, переданного через командную строку. Если пользователь забудет предоставить аргументы, модуль корректно отобразит сообщение с помощью.

Обдуманные уловки с ошибками в argparse

В своем исходном состоянии argparse выдаст сообщение об ошибке и пояснение по применению команды в случае несовпадения аргументов с его ожиданиями. Тем не менее, возможна кастомизация его функциональности: для этого можно создать подкласс ArgumentParser, в котором заменить метод error на вызов функции print_help.

Идеальная отмена с использованием sys.exit(2)

Применение sys.exit(2) гарантирует завершение работы скрипта с возвращением кода ошибки, причём это произойдёт только после вывода сообщения помощи. Код 2 означает, что work-flow был выполнен, но результат его работы был неудовлетворительным для скрипта.

Ловушки и подводные камни: за рамками стандартной работы с ошибками в argparse

Прокрутка argparse с использованием субпарсеров

Использование функции add_subparsers() может усложнить управление набором команд. В таких случаях использование значения по умолчанию в set_defaults допускает задание конкретного действия для случая вызова субпарсера без аргументов.

Пропущенные позиционные аргументы: залы обмана

Ошибки, связанные с отсутствующими позиционными аргументами, могут быть запутанными. Для их определения следует использовать блок try-except вокруг parse_args. Это позволит перехватывать исключение ArgumentParserError и гарантировать качественный вывод сообщения помощи.

Отделка скрипта: выпуск под ключ

Вывод краткого справочника с помощью print_usage

Иногда полное руководство лишнее, и достаточно только краткого справочника. ArgumentParser.print_usage() предоставляет короткое описание структуры команд без детальных характеристик и полного текста сообщения помощи.

Значения по умолчанию: безопасная сеть для argparse

Настройки по умолчанию в parse_args могут служить в качестве условия для проверки аргументов в блоке if-else. Это делает скрипт более адаптивным и дружелюбным к пользователю в случае отсутствия ввода аргументов.

Коды завершения: последний аккорд интерактивности

Правильно настроенный sys.exit выдаёт адекватный код завершения, который отражает состояние скрипта, наглядно сообщая о его текущем статусе, как полицейский, регулирующий движение на светофоре.

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

Представьте себе работу модуля argparse, который требует помощи, при отсутствии указания аргументов в скрипте:

Markdown
Скопировать код
Ваш скрипт напоминает милого щенка 🐶...

  Без аргументов  =  Нет игрушки для жевания 🦴

В итоге щенок (скрипт) огорчен отсутствием игрушки (аргументов).

Python
Скопировать код
if no args:   # Если у щенка нет игрушки...
    parser.print_help()  # ...скажите о своей потребности в помощи!

Теперь возникшую потребность можно удовлетворить, принеся игрушку для жевания и помогая щенку развернуться полностью.

Markdown
Скопировать код
Игрушка для жевания 🦴 -> Щенок 🐶: обрадовался и готов демонстрировать свои умения!

📜 Теперь щенок готов показать все, что умеет!

Хранилище советов и приёмов

Значения по умолчанию: верный рыцарь

Определение действия по умолчанию через set_defaults() можно сравнить с наёмником в блестящих латах, который обеспечит необходимую функциональность скрипту даже при отсутствии входных данных.

«Радар» в виде sys.argv

С помощью sys.argv вы можете, как радар, проверять, не пуст ли вызов скрипта, и при необходимости выводить инструкции по его использованию.

Симфоническая партия parse_args()

Подходите к parse_args() как к дирижёру оркестра — расшифруйте суть пользовательского ввода и направляйте его с помощью сообщения помощи, создавая гармоничный интерфейс командной строки.

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

  1. argparse — Парсер аргументов командной строки в Python 3.12.2 — в официальной документации Python подробно описывается использование модуля argparse.
  2. Вывод сообщения помощи используя argparse в Python при вызове скрипта без аргументов — Stack Overflow — на Stack Overflow обсуждается возможность изменения стандартного поведения модуля argparse.
  3. Создание интерфейсов командной строки с использованием argparse в Python — Real Python — с подробным руководством от Real Python вы познаете все нюансы создания интерфейсов командной строки с использованием argparse.
  4. argparse — Работа с аргументами командной строки — PyMOTW 3 — в руководстве PyMOTW проиллюстрирована работа с опциональными аргументами, а также приведены другие особенности использования argparse.
  5. Самоучитель по использованию argparse — Документация Python 3.12.2 — получите базовые знания об использовании модуля argparse, следуя официальным учебным руководствам Python.
  6. Автоматизация рутинных задач с Python — в этой главе обсуждается автоматизация задач с использованием Python и особенности работы с аргументами командной строки.