"docopt.DocoptLanguageError: --replicas must not have an argument" only with "replicas", not "replication"
"docopt.DocoptLanguageError: --replicas must not have an argument" only with "replicas", not "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
Use two spaces to separate options with their informal description:
--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.
的实时(预填充)测试
将损坏版本的 Options:
部分中的 --replicas
更改为 --replicas=<replicas>
。然后it works.
基本上,如果一个选项带有一个参数,那么该参数也必须出现在“选项:”部分的选项条目中。你的两个版本都犯了同样的错误。
您的第二个版本之所以“有效”,是因为它没有为您发现错误,因为您没有遵循“选项及其描述之间的两个 space”规则而混淆了它。如果在“工作”版本中的 --replication
之后添加所需的 space,则会得到 the same error.
您也可以通过在 --replicas
和“选项”部分的描述之间仅放置一个 space 来“修复”损坏的版本。然后是 also works,虽然因为这种方式“违反了 docopt 的规则”,我不会指望它工作 - 如果是我,我尝试“修复”这将是
尝试在选项及其描述之间接受一个 space,在这种情况下,此版本(以及您在问题中发布的“工作”版本)会引发相同的错误,或者
尝试确保此版本(以及您在问题中发布的“工作”版本)始终抛出选项及其描述之间没有足够 spaces 的异常.
这是 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
Use two spaces to separate options with their informal description:
--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.
的实时(预填充)测试
将损坏版本的 Options:
部分中的 --replicas
更改为 --replicas=<replicas>
。然后it works.
基本上,如果一个选项带有一个参数,那么该参数也必须出现在“选项:”部分的选项条目中。你的两个版本都犯了同样的错误。
您的第二个版本之所以“有效”,是因为它没有为您发现错误,因为您没有遵循“选项及其描述之间的两个 space”规则而混淆了它。如果在“工作”版本中的 --replication
之后添加所需的 space,则会得到 the same error.
您也可以通过在 --replicas
和“选项”部分的描述之间仅放置一个 space 来“修复”损坏的版本。然后是 also works,虽然因为这种方式“违反了 docopt 的规则”,我不会指望它工作 - 如果是我,我尝试“修复”这将是
尝试在选项及其描述之间接受一个 space,在这种情况下,此版本(以及您在问题中发布的“工作”版本)会引发相同的错误,或者
尝试确保此版本(以及您在问题中发布的“工作”版本)始终抛出选项及其描述之间没有足够 spaces 的异常.