Python: как обрабатывать исключения из argparse? - PullRequest
2 голосов
/ 26 августа 2011

Я бы хотел использовать мою программу следующим образом:

pythonScript -f имя файла

Но если я забыл -f, я все еще хочу получить имя файла.

Так что я хочу, чтобы это «имя файла pythonScript» также работало (-> я могу получить имя файла из args.fileName или из обработки исключения)

Я знаю, что это должно быть легко, я просто не могу найти способ сделать это. Кто-нибудь может мне помочь? Спасибо

import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-f', action='store', dest='fileName',
    default = None, type=str, help='The file name')

try:
    args = parser.parse_args()
except:
    print "xxx"

1 Ответ

3 голосов
/ 26 августа 2011

Если вы хотите, чтобы -f был обязательным, вы можете сделать это с помощью argparse . Просто включите «required = True» внутри функции add_argument.

Помните, что обязательная опция противоречива. Не рекомендуется делать необходимые параметры, но иногда полезно. Если опция не указана, то место назначения остается значением None (или ему присваивается любое заданное по умолчанию значение, которое в вашем примере - None).

РЕДАКТИРОВАТЬ: Только что увидел ваши изменения, и я понимаю, что вы сейчас спрашиваете. optparse делает это проще IMO. Похоже, для позиционных аргументов с argparse, вам нужно использовать add_argument.

На самом деле нет простого способа заставить argparse сделать это за вас. Вы можете творчески смоделировать это с помощью следующего:

parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?')
parser.add_argument('-f', dest='file_opt')
args = parser.parse_args()
if args.file_opt:
    args.file = args.file_opt

Обычно, если задан параметр файла, он перезаписывает позиционный аргумент.

...