New submission from Paolo Benvenuto <paolobe...@gmail.com>:

I'm using argparse with this code:

parser = argparse.ArgumentParser(
    description='Scan a media tree in order to generate cache files suitable 
for showing a beautiful web gallery',
  )
  parser.add_argument(
    "config_file_or_album_path",
    help="the config file, if it's the only positional argument, or the album 
path, if two positional arguments are supplied"
  )
  parser.add_argument(
    "cache_path",
    nargs="?",
    default="",
    help="the cache path, if two positional arguments are supplied; otherwise, 
nothing"
  )
  parser.add_argument(
    "-s",
    "--periodic-save",
    nargs="?",
    type=int,
    const=5,
    default=0,
    dest="periodic_save",
    metavar="MINUTES",
    help="runs the scanner in a more robust way, saving json files every X 
minutes, where X is the value given, or 5 if no value is given; 0 means non 
autosaving"
  )
  parser.add_argument(
    "-j",
    "--recreate-json-files",
    action='store_true',
    dest="recreate_json_files",
    help="completely recreate the json files cache"
  )
  parser.add_argument(
    "-r",
    "--recreate-reduced-photos",
    action='store_true',
    dest="recreate_reduced_photos",
    help="completely recreate reduced photo cache files"
  )
  parser.add_argument(
    "-t",
    "--recreate-thumbnails",
    action='store_true',
    dest="recreate_thumbnails",
    help="completely recreate thumbnail cache files"
  )
  parser.add_argument(
    "-v",
    "--recreate-transcoded-videos",
    action='store_true',
    dest="recreate_transcoded_videos",
    help="completely recreate transcoded video cache files"
  )
  parser.add_argument(
    "-a",
    "--recreate-all",
    action='store_true',
    dest="recreate_all",
    help="completely recreate the cache: json files, reduced photos, thumbnails 
and transcoded videos; same as -jrtv"
  )
  parser.add_argument("--version", action="version", version='%(prog)s v5.3.10')
  args = parser.parse_args()

Running the app without parameter gives me:

$ myapp
usage: scanner [-h] [-s [MINUTES]] [-j] [-r] [-t] [-v] [-a] [--version] 
config_file_or_album_path [cache_path]
myapp: error: the following arguments are required: config_file_or_album_path

(the last line doesn't matter here, a required parameter is missing).

The -s option is optional and has an optional value, but:

$ myapp -s myfile
usage: scanner [-h] [-s [MINUTES]] [-j] [-r] [-t] [-v] [-a] [--version] 
config_file_or_album_path [cache_path]
scanner: error: argument -s/--periodic-save: invalid int value: '/my/file'

I'm expecting that, since there is a mandatory positional argument, myfile is 
interpreted as such, and only after that, -s is recognized as the optional 
argument without value.

----------
components: Library (Lib)
messages: 405322
nosy: paolobenve
priority: normal
severity: normal
status: open
title: argparse error with option with optional value
type: behavior
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue45673>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to