首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么docopt与docopt.DocoptLanguageError:无与伦比的'[‘失败?

为什么docopt与docopt.DocoptLanguageError:无与伦比的'[‘失败?
EN

Stack Overflow用户
提问于 2016-10-17 04:30:22
回答 1查看 1.5K关注 0票数 3

如果出现以下异常,为什么此代码会失败?

代码语言:javascript
复制
"""my_program - for doing awesome stuff

Usage: my_program [--foo]

Options:
    --foo - this will do foo
"""

import docopt
args = docopt.docopt(doc=__doc__)

例外:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/tmp/post.py", line 10, in <module>
    args = docopt.docopt(doc=__doc__)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 560, in docopt
    pattern = parse_pattern(formal_usage(DocoptExit.usage), options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 373, in parse_pattern
    result = parse_expr(tokens, options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 381, in parse_expr
    seq = parse_seq(tokens, options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 396, in parse_seq
    atom = parse_atom(tokens, options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 413, in parse_atom
    result = pattern(*parse_expr(tokens, options))
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 381, in parse_expr
    seq = parse_seq(tokens, options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 396, in parse_seq
    atom = parse_atom(tokens, options)
  File "/Users/rbednark/.virtualenvs/docopt-python2/lib/python3.5/site-packages/docopt.py", line 415, in parse_atom
    raise tokens.error("unmatched '%s'" % token)
docopt.DocoptLanguageError: unmatched '['

docopt版本:0.6.2

python版本:2.7.103.5.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-17 04:30:22

由于在这一行的--foo之后只有一个空格,它失败了:

代码语言:javascript
复制
    --foo - this will do foo

通过在--foo之后添加另一个空格来修复它

代码语言:javascript
复制
    --foo  - this will do foo

文件:

使用两个空格将选项与其非正式描述分开:

代码语言:javascript
复制
--verbose More text.   # BAD, will be treated as if verbose option had
                       # an argument "More", so use 2 spaces instead
-q        Quit.        # GOOD
-o FILE   Output file. # GOOD
--stdout  Use stdout.  # GOOD, 2 spaces

补充参考:docopt源代码

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40078516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档