Игнорировать сгенерированные argparse справочные сообщения и сообщения об использовании, а также выдавать ошибки, когда Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Игнорировать сгенерированные argparse справочные сообщения и сообщения об использовании, а также выдавать ошибки, когда

Сообщение Anonymous »

Предположим, у меня есть парсер:

Код: Выделить всё

import argparse
def int_main():
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))
return 1

if __name__ == '__main__':
int_main()
Предполагая, что приведенный выше код Python сохранен в файле с именем prog.py. Если я дам неверные аргументы в командной строке:

Код: Выделить всё

python prog.py a b c

Выдает следующее сообщение об ошибке:

Код: Выделить всё

usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'
В моем контексте я не хочу, чтобы это сообщение об ошибке генерировалось, я хочу, например, int_main() просто возвращать False, если возникает какая-либо ошибка, указывающая на синтаксический анализ ошибки.
Как это сделать?
Я пробовал:

Код: Выделить всё

import argparse
def int_main():
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
try:
args = parser.parse_args()
# print(args.accumulate(args.integers))
except:
return False
return True

if __name__ == '__main__':
res = int_main()
print(res)

но не сработало.
Обновление
Есть кажется ошибка:

Код: Выделить всё

import argparse
parser = argparse.ArgumentParser(exit_on_error=False)
try:
parser.parse_args('invalid arguments'.split())
except argparse.ArgumentError:
print('ArgumentError caught.')
по-прежнему возникает ошибка, даже если установлено значение False. Как это исправить? Мне действительно нужно решение, охватывающее все возможные исключения и никогда не выдающее ошибки, потому что я провожу модульное тестирование, и это может что-то сломать
update2

Код: Выделить всё

import argparse

def copy_(name1, name2):
return True

def int_main():

parser = argparse.ArgumentParser(prog='blabla',
exit_on_error=False,
argument_default=argparse.SUPPRESS,
add_help=False)

subparsers = parser.add_subparsers(dest="subparser_name", help="")
one_parser = subparsers.add_parser("copy_", help="")
one_parser.add_argument(
dest = "name1",
type = str,
metavar = "NAME1",
)
one_parser.add_argument(
dest = "name2",
type = str,
metavar = "NAME2",
)
one_parser.set_defaults(func=copy_)

try:
args = parser.parse_args()
print(args.func(args.name1, args.name2))
except argparse.ArgumentError:
return False

return True

if __name__ == '__main__':
int_main()
Этот по-прежнему выводит:

Код: Выделить всё

usage: blabla copy_ [-h] NAME1 NAME2
blabla copy_: error: the following arguments are required: NAME2
при отправке этой команды python arg.py copy_ a. Как мы можем видеть только False, а не сообщение об ошибке?

Подробнее здесь: https://stackoverflow.com/questions/790 ... en-users-g
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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