python - ¿Por qué mi opción docopt no tiene su valor predeterminado?
docopt python (1)
Así que de acuerdo con la sugerencia en la otra pregunta, cloné el repositorio de docopt e instalé la sugerencia actual con efecto cero. Ahora que tenía el código fuente, decidí hacer una depuración y ver si podía encontrar el problema.
En la línea 200 en el método de análisis en la clase de opción, se encuentra la expresión regular utilizada para capturar los valores predeterminados:
matched = re.findall(''/[default: (.*)/]'', description, flags=re.I)
Después de imprimir un grupo de las variables circundantes, encontré que el valor de las variables de description
era una cadena vacía. Aquí está la línea que establece la descripción:
options, _, description = option_description.strip().partition('' '')
La parte que me llamó la atención fue esta: .partition('' '')
, que son dos espacios. Entonces, después de actualizar mi código con éxito, me dirijo a los documentos y busco "espacios": https://github.com/docopt/docopt#option-descriptions-format sexta viñeta:
"Usa dos espacios para separar las opciones con su descripción informal"
TL; DR RTFM (o al menos el código).
Sugerencia extra : docopt entiende las descripciones de varias líneas, por lo que puede ajustar cualquier cosa que cruce la línea de 80 caracteres:
Options:
--help Show this message and exit
--version Show version info and exit
-w WIDTH --width=WIDTH The out to out width of the deck (feet)
[default: 73]
-g GIRDERS --girders=GIRDERS The number of girders [default: 8]
-h HEIGHT --height=HEIGHT The height of the girders (inches)
[default: 56]
-t THICK --thick=THICK The deck thickness (inches) [default: 8]
-a ADIM --adim=ADIM The "A" dimension, max. deck thickness at
centerline of girder (inches) [default: 12]
-l LSLP --leftslope=LSLP The left-hand deck slope (ft/ft)
[default: -0.02]
-r RSLP --rightslope=RSLP The right-hand deck slope (ft/ft)
[default: -0.02]
-c --center Indicates pivot point is at center of bridge
-o OFFSET --offset=OFFSET The offset of pivot point from center
[default: 0]
No es tan legible, pero analiza correctamente.
Estoy usando docopt
en un ejemplo para un módulo en el que estoy trabajando, y todos los valores predeterminados de las opciones funcionan, excepto uno. He modificado todo el código que contiene y rodea la opción tratando de identificar el problema, ¡pero no tendrá un valor predeterminado!
Mi bloque de opciones se ve así:
Options:
--help Show this message and exit
--version Show version info and exit
-w WIDTH --width=WIDTH The out to out width of the deck (feet) [default: 73]
-g GIRDERS --girders=GIRDERS The number of girders [default: 8]
-h HEIGHT --height=HEIGHT The height of the girders (inches) [default: 56]
-t THICK --thick=THICK The deck thickness (inches) [default: 8]
-a ADIM --adim=ADIM The "A" dimension, max deck thick @ CL girder [default: 12]
-l LSLP --leftslope=LSLP The left-hand deck slope (ft/ft) [default: -0.02]
-r RSLP --rightslope=RSLP The right-hand deck slope (ft/ft) [default: -0.02]
-c --center Indicates pivot point is at center of bridge
-o OFFSET --offset=OFFSET The offset of pivot point from center [default: 0]
¡La opción de girders
nunca tiene un valor predeterminado!
Releí esta pregunta varias veces, pero parece no tener relación.