usage metavar float example argumentparser argument python argparse case-insensitive

metavar - argparse python example



Elecciones argparse insensibles a mayúsculas y minúsculas (2)

Transformar el argumento en minúsculas usando

type = lambda s : s.lower()

para el -p .

Como señaló por chepner en los comentarios, ya que str.lower ya es una función apropiada, el contenedor lambda no es necesariamente necesario y usted podría simplemente usar

type = str.lower

directamente.

¿Es posible verificar las opciones de argparse de manera que no distinga entre mayúsculas y minúsculas?

import argparse choices = ["win64", "win32"] parser = argparse.ArgumentParser() parser.add_argument("-p", choices=choices) print(parser.parse_args(["-p", "Win32"]))

resultados en:

usage: choices.py [-h] [-p {win64,win32}] choices.py: error: argument -p: invalid choice: ''Win32'' (choose from ''win64'',''win32'')


Usar lower palabra lower en el type es una buena manera de hacerlo, si no le importa perder la información del caso.

Si desea conservar el caso, puede definir una clase de choices personalizadas. Las choices necesitan dos métodos, __contains__ (para pruebas in ), e iteration (para enumerar las opciones).

class mylist(list): # list subclass that uses lower() when testing for ''in'' def __contains__(self, other): return super(mylist,self).__contains__(other.lower()) choices=mylist([''win64'',''win32'']) parser = argparse.ArgumentParser() parser.add_argument("-p", choices=choices) print(parser.parse_args(["-p", "Win32"])) # Namespace(p=''Win32'')

La ayuda es:

usage: ipython [-h] [-p {win64,win32}] optional arguments: -h, --help show this help message and exit -p {win64,win32}