2014-01-16 14 views
9

Ich habe einen Standardwert, der eine '%' enthält, die ich auch in das Hilfedokument meines Arguments einfügen. Z.B .:Python argparse Fehler mit '%' in Hilfe-Zeichenfolge

argparse Fehler auf parse_args()

[snip] 
    args = parser.parse_args() 
[snip]"../python2.5/site-packages/argparse.py", line 622, in _expand_help 
    return self._get_help_string(action) % params 
ValueError: unsupported format character 'O' (0x4f) at index 83 

Antwort

7

ich ein traditionelles Escape-Zeichen versucht hatte, die nicht funktionierte. Dann fand ich einen Kommentar über die Verwendung eines '%' als Escape-Zeichen und das funktionierte. Zum Beispiel:

default = "5% foo" 
foo_group.add_argument(
    "--foo", 
    default=default, 
    help="Foo amount. Default: %s" % default.replace(r"%", r"%%")), 
) 
args = parser.parse_args() 

Ich bin froh, dass ich nicht alle "%" durch "[Prozentzeichen]" ersetzen muss. Hah.

5

Eine andere Möglichkeit, Standardwerte einzubeziehen, ist eine %(default)s in der Hilfezeile.

p=argparse.ArgumentParser() 
p.add_argument('--foo', default="5% foo", help="Foo amount. Default: %(default)s") 
p.print_help() 

die

usage: ipython [-h] [--foo FOO] 

optional arguments: 
    -h, --help show this help message and exit 
    --foo FOO Foo amount. Default: 5% foo 

Von der argparse Dokumentation produziert:

Die Hilfe Strings können, umfassen verschiedene Formatbezeich zu vermeiden Wiederholung von Dingen wie dem Programmnamen oder das Argument Standard. Die verfügbaren Spezifizierer umfassen den Programmnamen,% (prog) s und die meisten Schlüsselwortargumente für add_argument(), z. % (Standard) s,% (Typ) s, etc .:

+0

Super Tipp! Wird es "%" automatisch zurückgeben? – Rafe

+0

Beachten Sie die '%' in meinem Standardwert. Es ist nicht notwendig, automatisch zu entkommen, da 'argparse' nicht versucht, den Standardwert zu 'evaluieren'. Ihr Code benötigt es, weil Sie den Standardwert in die Hilfezeichenfolge eingeben, bevor Sie es an "argparse" übergeben haben. – hpaulj