"docopt.DocoptLanguageError: --replicas must not have an argument"只用"replicas",不"replication"



这是DocOpt的工作版本(部分取自海军命运):

"""
Instance Manager
Usage:
instance_manager cluster create <name> <manager> <worker>... [--google|--virtualbox]
instance_manager cluster delete <name>
instance_manager cluster <name> add <worker> [--size=<size>]
instance_manager cluster <name> remove <worker>
instance_manager cluster <name> service add <service> [--replication=<replication>]
instance_manager cluster <name> service remove <service>
instance_manager cluster <name> service remove <service>
instance_manager instance (add|remove) <x> <y> [--moored|--drifting]
instance_manager -h | --help
instance_manager --version
Options:
-h --help     Show this screen.
--version     Show version.
--size=<size> Size of the container.
--moored      Moored (anchored) instance.
--drifting    Drifting instance.
--google  Google Cloud.
--virtualbox  VirtualBox.
--replication Service Replication.
"""
from docopt import docopt

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

这是DocOpt的非工作版本。

"""
Instance Manager
Usage:
instance_manager cluster create <name> <manager> <worker>... [--google|--virtualbox]
instance_manager cluster delete <name>
instance_manager cluster <name> add <worker> [--size=<size>]
instance_manager cluster <name> remove <worker>
instance_manager cluster <name> service add <service> [--replicas=<replicas>]
instance_manager cluster <name> service remove <service>
instance_manager cluster <name> service remove <service>
instance_manager instance (add|remove) <x> <y> [--moored|--drifting]
instance_manager -h | --help
instance_manager --version
Options:
-h --help     Show this screen.
--version     Show version.
--size=<size> Size of the container.
--moored      Moored (anchored) instance.
--drifting    Drifting instance.
--google  Google Cloud.
--virtualbox  VirtualBox.
--replicas    Service Replication.
"""
from docopt import docopt

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

错误:

docopt.DocoptLanguageError: --replicas must not have an argument

唯一的区别是人们使用单词replicas而不是replication.

diff first.py second.py 
9c9
<   instance_manager cluster <name> service add <service> [--replication=<replication>]
---
>   instance_manager cluster <name> service add <service> [--replicas=<replicas>]
24c24
<   --replication Service Replication.
---
>   --replicas    Service Replication.

这是不可接受的。

--replication后需要两个空格,你只有一个。--size=<size>后相同.

此外,在第二个示例中,[Options]中有--replicas(无参数),模式中有--replicas=<replicas>(顶部)。这些相互矛盾,不清楚是否应该允许争论。

最后,不需要有两个相同的模式,删除一个:

instance_manager cluster <name> service remove <service>

文档:https://github.com/docopt/docopt#option-descriptions-format

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

--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

这是--replication的工作模式:

Instance Manager
Usage:
instance_manager cluster create <name> <manager> <worker>... [--google|--virtualbox]
instance_manager cluster delete <name>
instance_manager cluster <name> add <worker> [--size=<size>]
instance_manager cluster <name> remove <worker>
instance_manager cluster <name> service add <service> [--replication=<replicas>]
instance_manager cluster <name> service remove <service>
instance_manager instance (add|remove) <x> <y> [--moored|--drifting]
instance_manager -h | --help
instance_manager --version
Options:
-h --help      Show this screen.
--version      Show version.
--size=<size>  Size of the container.
--moored       Moored (anchored) instance.
--drifting     Drifting instance.
--google       Google Cloud.
--virtualbox   VirtualBox.
--replication=<replicas>  Service Replication.

http://try.docopt.org 的实时(预填充)测试

在损坏版本的Options:部分中将--replicas更改为--replicas=<replicas>。然后它起作用了。

基本上,如果一个选项接受一个参数,那么该参数也必须出现在"选项:"部分的选项条目中。您在两个版本中都犯了相同的错误。

你的第二个版本只是"有效",因为它没有为你发现这个错误,因为你没有遵循"选项及其描述之间的两个空格"规则,从而混淆了它。如果在"工作"版本中--replication后添加所需的空间,则会收到相同的错误。

您还可以通过在"选项"部分中的--replicas和描述之间仅放置一个空格来"修复"损坏的版本。然后也是工作,尽管由于这种方式"违反 docopt 的规则",我不会指望它有效 - 如果是我,我试图"修复"这将是要么

  1. 尝试在选项及其描述之间接受一个空格,在这种情况下,此版本(以及您在问题中发布的"工作"版本)将引发相同的错误,或者

  2. 尝试确保此版本(以及您在问题中发布的"工作"版本)始终抛出有关选项及其描述之间没有足够的空格的异常。

相关内容

  • 没有找到相关文章

最新更新