Лучший вариант предоставления подсказок типа для аргументов argparse, чем собственное пространство имен.Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Лучший вариант предоставления подсказок типа для аргументов argparse, чем собственное пространство имен.

Сообщение Гость »


Я пытаюсь использовать mypy для проверки типа моей программы. Программа использует argparse для анализа аргументов командной строки. Я хочу добавить подсказки типов для аргументов командной строки.

импортировать argparse импортировать типизацию # определить типы примеров и функцию, которая их использует Секунды = typing.NewType("Секунды", float) Минуты = typing.NewType("Минуты", float) def sec_to_min(s: Секунды) -> Минуты: возврат Минуты(с / 60) # указываем аргументы и анализируем их синтаксический анализатор = argparse.ArgumentParser() parser.add_argument("-t", "--time", default=1., type=float, help="время в секундах") args = parser.parse_args() пытаться: # mypy показывает тип Любой показ_типа (args.time) кроме NameError: проходить # (1) проходит проверку типа секунды: Секунды = args.time # (2) проходит проверку типа sec_to_min(args.time) Я бы хотел, чтобы mypy распознавал args.time как Секунды. Текущий код должен распознавать args.time как число с плавающей запятой и жаловаться, поскольку передача числа с плавающей запятой в sec_to_min также вызывает жалобы.

Я попытался изменить аргумент type add_argument на type=lambda x: Seconds(float(x)). Это не имело никакого эффекта, mypy по-прежнему идентифицировал args.time как any.
Как упоминалось здесь, я также попытался предоставить собственное пространство имен. Это изменило выявленный тип args.time на Seconds. Я хотел бы избежать этого, поскольку мне пришлось бы дублировать имя для каждого аргумента, а значение по умолчанию из add_argument переопределяется пользовательским пространством имен.
класс TypedNameSpace(argparse.Namespace): def __init__(self, *args, **kwargs): self.time: Секунды = Секунды(0.) super(TypedNameSpace, self).__init__(*args, **kwargs)
Реклама
Ответить Пред. темаСлед. тема

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

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»