argparse позволяет вам установить (внутри объекта пространства имен) все переменные, упомянутые в аргументах, добавленных в парсер, на основе вашей спецификации и анализируемой командной строки. Если вы установите значение по умолчанию, то эти переменные будут иметь это значение по умолчанию, если они не были видны в командной строке, они не будут отсутствовать в объекте пространства имен. И если вы не укажите значение по умолчанию, то есть неявное значение по умолчанию None
. Таким образом, проверка длины объекта пространства имен, однако вам удается это сделать, не имеет смысла как способ проверить, были ли проанализированы любые аргументы; он всегда должен иметь одинаковую длину.
Вместо этого, если вы знаете, что у вас есть куча аргументов без настроек по умолчанию, и вы хотите проверить, было ли какое-либо из них установлено значение любого значения None
... сделайте это. Вы можете использовать понимание списка и функцию vars
, чтобы перебрать их, не дублируя список имен из вызовов add_argument
, как показано в ответе Martijn.
Это немного сложнее, если некоторые из ваших аргументов имеют значения по умолчанию, и, более того, если они имеют значения по умолчанию, которые могут быть явно указаны в командной строке (например, числовой аргумент, который по умолчанию равен 0, делает невозможным по умолчанию от пользователя, предоставляющего 0). В этом случае я не уверен, что существует общее решение, которое всегда работает без знания того, что такое аргументы.
использование пытаются кроме захвата TypeError, так что вы знаете, что ничего не было передано – avasal
@avasal, 'LEN (арг)' всегда бросает TypeError. – huon