python3 docopt выдает ошибку использования при использовании pyCharm

Мне нужна базовая помощь по docopt с python3.7. Я использую в pyCharm. Я попытался запустить пример кода, который показан на веб-сайте docopt.org. Но система выдает ошибки использования. Я установил doctop через pip install docopt версии 0.6.2. Я нашел ветку с такими же сообщениями об ошибках, но у пользователя в ней не было строки документации, поэтому у него это не сработало.

Вот код:

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""Naval fate.

Usage:
  naval_fate.py  ship new <name>...
  naval_fate.py  ship <name> move <x> <y> [ --speed=<kn>]
  naval_fate.py  ship shoot <x> <y>
  naval_fate.py  mine (set|remove) <x> <y> [--moored|--drifting}
  naval_fate.py  -h| --help
  naval_fate.py  --version

Options:
  -h --help     Show this screen.
  --version     Show version.  
  --speed=<kn>  Speed in knots [default: 10].
  -- moored     Moored (anchored) mine.
  -- drifting   Drifting mine.

"""
from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='1')
    print(arguments)

Вот ОШИБКА:

...\Scripts\python.exe 
.../naval_fate.py
Traceback (most recent call last):
  File 
".../naval_fate.py", line 27, in <module>
    arguments = docopt(__doc__, version='1')
  File "...\lib\site-packages\docopt.py", line 558, in docopt
    DocoptExit.usage = printable_usage(doc)
  File "...\lib\site-packages\docopt.py", line 466, in printable_usage
    usage_split = re.split(r'([Uu][Ss][Aa][Gg][Ee]:)', doc)
  File "C:\Python\Python37\Lib\re.py", line 213, in split
    return _compile(pattern, flags).split(string, maxsplit)
TypeError: expected string or bytes-like object

Process finished with exit code 1

Что я пробовал:

  • удалил расширения файлов Navy_fate.py.
  • удалил и переустановил docopt.
  • изменены позиции слов в разделах использования и параметров и после них.
  • использовал два пробела между параметрами и текстом (как найдено в другой теме)
  • пытался форматировать вне строки документации разными способами.

e.g

from docopt
...
arguments = docopt.docopt(__doc__, version='1')

вместо

from docopt import docopt
...
arguments = docopt(__doc__, version='1')

Но все это не помогло. У кого-нибудь есть идея? Спасибо.


person Dshoon    schedule 10.11.2018    source источник


Ответы (1)


Ну, я нашел его! Это были фигурные скобки в конце строки в части «Использование».

naval_fate.py  mine (set|remove) <x> <y> [--moored|--drifting}

После замены на ] все заработало.
Надеюсь, я смогу помочь кому-то еще с этой маленькой (большой) ошибкой.

person Dshoon    schedule 13.11.2018
comment
Блок описания перед from docopt import docopt должен быть первым в файле. Если я вставлю import blablabla перед блоком """, я получу ошибку, которую вы описали. Сумасшедший питон. - person Igor; 18.12.2019