Подтвердить что ты не робот

Как создать пространство имен Python (значение argparse.parse_args)?

Чтобы интерактивно протестировать мой python script, я хотел бы создать объект Namespace, аналогичный тому, который будет возвращен argparse.parse_args(). Очевидным способом,

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a

Process Python exited abnormally with code 2

может привести к тому, что реплика Python будет выходить (как указано выше) на глупую ошибку.

Итак, , что является самым простым способом создания пространства имен Python с заданным набором атрибутов?

Например, я могу создать dict на лету (dict([("a",1),("b","c")])), но я не могу использовать его как Namespace:

AttributeError: 'dict' object has no attribute 'a'
4b9b3361

Ответ 1

Вы можете создать простой класс:

class Namespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

и он будет работать точно так же, как класс argparse Namespace, когда дело доходит до атрибутов:

>>> args = Namespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'

В качестве альтернативы просто импортируйте класс; он доступен из модуля argparse:

from argparse import Namespace

args = Namespace(a=1, b='c')

Ответ 2

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

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-a")
parser.parse_args(['-a 12'])
>>> Namespace(a=' 12')