programing

필수 하위 구문 분석기가있는 Argparse

sourcetip 2021. 1. 14. 23:46
반응형

필수 하위 구문 분석기가있는 Argparse


저는 Python 3.4를 사용 argparse하고 있으며 하위 파서와 함께 사용하려고합니다 . 위치 인수를 제공하지 않는 경우 (하위 파서 / 서브 프로그램을 표시하기 위해) Python 2.x의 동작과 유사한 동작을 원합니다. 유용한 오류 메시지가 표시됩니다. 즉, python2다음과 같은 오류 메시지가 표시됩니다.

$ python2 subparser_test.py    
usage: subparser_test.py [-h] {foo} ...
subparser_test.py: error: too few arguments

https://stackoverflow.com/a/22994500/3061818 에서 required제안한대로 속성을 설정하고 있지만 Python 3.4.0에서 오류가 발생합니다 .-전체 추적 :TypeError: sequence item 0: expected str instance, NoneType found

$ python3 subparser_test.py    
Traceback (most recent call last):
  File "subparser_test.py", line 17, in <module>
    args = parser.parse_args()
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1717, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1749, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1984, in _parse_known_args
    ', '.join(required_actions))
TypeError: sequence item 0: expected str instance, NoneType found

이것은 내 프로그램 subparser_test.py입니다 -https : //docs.python.org/3.2/library/argparse.html#sub-commands :

import argparse

# sub-command functions
def foo(args):
    print('"foo()" called')

# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
subparsers.required = True

# create the parser for the "foo" command
parser_foo = subparsers.add_parser('foo')
parser_foo.set_defaults(func=foo)

args = parser.parse_args()
args.func(args)

관련 질문 : 이 argparse 코드가 Python 2와 3간에 다르게 작동하는 이유는 무엇입니까?


당신 subparsersdest.

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='cmd')
subparsers.required = True

지금:

1909:~/mypy$ argdev/python3 stack23349349.py
usage: stack23349349.py [-h] {foo} ...
stack23349349.py: error: the following arguments are required: cmd

이 '누락 된 인수'오류 메시지를 발행하려면 코드에서 해당 인수에 이름을 지정해야합니다. 위치 인수 (예 : 하위 구문 분석)의 경우 해당 이름은 기본적으로 'dest'입니다. 연결된 SO 답변에 이에 대한 (사소한) 메모가 있습니다.

argparse지난 파이썬 릴리스에서 몇 안되는 '패치'중 하나가 '필수'인수를 테스트하는 방법을 변경했습니다. 불행히도 하위 파서와 관련하여이 버그가 발생했습니다. 이 문제는 다음 릴리스에서 수정해야합니다 (빠르지 않은 경우).

최신 정보

Py2에서이 선택적 하위 파서 동작을 원하는 경우 가장 좋은 옵션은 다음에 설명 된대로 2 단계 파서를 사용하는 것 같습니다.

Python 2.7에서 Argparse 모듈을 사용하여 기본 하위 구문 분석기를 설정하는 방법

관련 버그 / 문제에 최근 활동이 있습니다.

https://bugs.python.org/issue9253

update

A fix to this is in the works: https://github.com/python/cpython/pull/3027

ReferenceURL : https://stackoverflow.com/questions/23349349/argparse-with-required-subparser

반응형