[PYTHON] Inclure "%" dans l'aide argparse pour mourir

Supposons que vous créez un script Python comme celui ci-dessous.

import argparse

parser = argparse.ArgumentParser(description='')
parser.add_argument('--zoom',
    action='store',
    type=float,
    default=1.0,
    help="Taux d'expansion(%)")
args = parser.parse_args()

print("zoom is {}".format(args.zoom))

Cela peut être fait normalement,

$ python hoge.py --zoom 2.0
zoom is 2.0

J'obtiens une erreur de valeur lorsque j'essaye d'afficher de l'aide.

$ python hoge.py -h
Traceback (most recent call last):
  File "hoge.py", line 9, in <module>
    args = parser.parse_args()
  File "C:\Python37\lib\argparse.py", line 1749, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "C:\Python37\lib\argparse.py", line 1781, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "C:\Python37\lib\argparse.py", line 1987, in _parse_known_args
    start_index = consume_optional(start_index)
  File "C:\Python37\lib\argparse.py", line 1927, in consume_optional
    take_action(action, args, option_string)
  File "C:\Python37\lib\argparse.py", line 1855, in take_action
    action(self, namespace, argument_values, option_string)
  File "C:\Python37\lib\argparse.py", line 1037, in __call__
    parser.print_help()
  File "C:\Python37\lib\argparse.py", line 2474, in print_help
    self._print_message(self.format_help(), file)
  File "C:\Python37\lib\argparse.py", line 2458, in format_help
    return formatter.format_help()
  File "C:\Python37\lib\argparse.py", line 284, in format_help
    help = self._root_section.format_help()
  File "C:\Python37\lib\argparse.py", line 215, in format_help
    item_help = join([func(*args) for func, args in self.items])
  File "C:\Python37\lib\argparse.py", line 215, in <listcomp>
    item_help = join([func(*args) for func, args in self.items])
  File "C:\Python37\lib\argparse.py", line 215, in format_help
    item_help = join([func(*args) for func, args in self.items])
  File "C:\Python37\lib\argparse.py", line 215, in <listcomp>
    item_help = join([func(*args) for func, args in self.items])
  File "C:\Python37\lib\argparse.py", line 525, in _format_action
    help_text = self._expand_help(action)
  File "C:\Python37\lib\argparse.py", line 614, in _expand_help
    return self._get_help_string(action) % params
ValueError: unsupported format character ')' (0x29) at index 5

Comme vous pouvez le voir à la fin du message d'erreur, la chaîne de sortie est formatée comme return self._get_help_string (action)% params. Il semble qu'une analyse non intentionnelle soit effectuée lorsque % est inclus.

La solution de contournement consiste à éviter d'utiliser «%» comme indiqué ci-dessous.

import argparse

parser = argparse.ArgumentParser(description='')
parser.add_argument('--zoom',
    action='store',
    type=float,
    default=1.0,
-    help="Taux d'expansion(%)")
+    help="Taux d'expansion(percent)")
args = parser.parse_args()

print("zoom is {}".format(args.zoom))

Sinon, échappez avec %%.

-    help="Taux d'expansion(%)")
+    help="Taux d'expansion(%%)")

C'est sorti.

$ python hoge.py -h
usage: hoge.py [-h] [--zoom ZOOM]

optional arguments:
  -h, --help   show this help message and exit
  --zoom agrandissement ZOOM(percent)
$ python hoge.py -h
usage: hoge.py [-h] [--zoom ZOOM]

optional arguments:
  -h, --help   show this help message and exit
  --zoom agrandissement ZOOM(%)

Recommended Posts

Inclure "%" dans l'aide argparse pour mourir
Enregistrer automatiquement les arguments de fonction dans argparse en Python
Comment obtenir de l'aide dans un shell interactif
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Covector pour penser en fonction
Pour vider stdout en Python
Inclure le référentiel GitHub dans requirements.txt
Portage d'Argparse à Hydra
Connectez-vous au site Web en Python
Comment utiliser Python Argparse
Parler avec Python [synthèse vocale]
Comment développer en Python
Publier sur Slack en Python