Подтвердить что ты не робот

Почему мой параметр docopt не имеет значения по умолчанию?

Я использую docopt в примере для модуля, над которым я работаю, и все значения по умолчанию параметра работают, кроме одного. Я изменил весь код, содержащий и окружающий параметр, пытаясь определить проблему, но не будет принимать значения по умолчанию!

Мой блок параметров выглядит следующим образом:

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]

Опция girders никогда не имеет значения по умолчанию!

Я перечитываю этот вопрос несколько раз, но он кажется не связанным.

4b9b3361

Ответ 1

В соответствии с предложением в другом вопросе я клонировал репозиторий docopt и установил текущий наконечник с нулевым эффектом. Теперь, когда у меня был исходный код, хотя я решил сделать некоторую отладку и посмотреть, могу ли я найти проблему.

В строке 200 метода parse в классе Option используется регулярное выражение, используемое для получения значений по умолчанию:

matched = re.findall('\[default: (.*)\]', description, flags=re.I)

После печати куча окружающих переменных я обнаружил, что значение description vars было пустой строкой. Вот строка, которая устанавливает описание:

options, _, description = option_description.strip().partition(' ')

Часть, которая попалась мне на глаза, была таковой: .partition(' '), это два пробела. Поэтому после обновления моего кода я вернусь к документам и поискать "пробелы": https://github.com/docopt/docopt#option-descriptions-format Шестая пуля:

"Используйте два пробела для разделения опций с их неофициальным описанием"

TL; DR RTFM (или, по крайней мере, код).

Бонусный совет: docopt понимает многострочные описания, поэтому вы можете просто обернуть все, что пересекает 80-значную строку:

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]

Не совсем читаемо, но правильно разбирается.