【问题标题】:python docopt: "expected string or buffer"python docopt:“预期的字符串或缓冲区”
【发布时间】:2017-12-05 15:35:02
【问题描述】:

我正在使用 docopt 模块来处理 python 脚本选项:

from docopt import docopt
"""Usage:
  ./convert [ -h | -i | -t | -c ]

Options:
  -h          Show this help
  -i          Convert image to vertical scroll box
  -t          Convert text to vertical scroll box
  -c          Convert command list to html
"""

def main(docopt_args):
...
if __name__ == '__main__':
    args = docopt(__doc__, version='v0.1')
    main(args)

Traceback(最近一次调用最后一次):文件
“/home/ajn/Converter-yaml-to-html-blocks/convert.py”,第 66 行,在
args = docopt(doc, version='v0.1') 文件“/usr/local/lib/python3.4/dist-packages/docopt.py”,第 558 行,在 文档
DocoptExit.usage = printable_usage(doc) 文件“/usr/local/lib/python3.4/dist-packages/docopt.py”,第 466 行,在 printable_usage
usage_split = re.split(r'([Uu][Ss][Aa][Gg][Ee]:)', doc) 文件“/usr/lib/python3.4/re.py”,第 196 行,在分裂
返回 _compile(pattern, flags).split(string, maxsplit) TypeError: 预期的字符串或缓冲区

有什么提示吗?

【问题讨论】:

  • 我怀疑您传递的__doc__None,它既不是字符串也不是缓冲区。 (记住:“显式优于隐式”。)
  • 解决方案是什么?

标签: python python-3.x


【解决方案1】:

对于任何困惑的人,在使用docopt 时,您应该在from docopt import docopt 之前写一个文档字符串。参数的选项是通过自动解析该字符串生成的。在这个问题中,文档字符串是:

"""Usage:
  ./convert [ -h | -i | -t | -c ]

Options:
  -h          Show this help
  -i          Convert image to vertical scroll box
  -t          Convert text to vertical scroll box
  -c          Convert command list to html
"""

并且应该放在导入之前。

在项目here的自述文件中查看更多示例

【讨论】:

    【解决方案2】:

    将文档字符串移动到文件的开头(导入行之前)

    【讨论】:

    • 我不明白这个...谁能回复这个?
    • 文档字符串是导入后的字符串文字。我添加了一个新答案,稍微解释一下
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多