首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这个docopt字符串在使用或不使用可选参数时都不起作用?

docopt是一个用于解析命令行参数的Python库。它通过解析docstring来生成命令行参数的帮助文档,并且可以根据定义的规则来解析用户输入的命令行参数。

在使用docopt时,如果一个参数是可选的,那么在解析命令行参数时,如果用户没有提供该参数,docopt会将其值设为None。这意味着在代码中,你需要判断该参数是否为None来确定用户是否提供了该参数。

如果你的docopt字符串在使用或不使用可选参数时都不起作用,可能有以下几个原因:

  1. docopt字符串的定义有误:请确保你正确定义了可选参数,并且在docopt字符串中正确指定了它们的名称和用法。
  2. 参数解析代码有误:请检查你的代码,确保你正确地使用了docopt库来解析命令行参数,并正确处理了可选参数的情况。
  3. 用户输入有误:请检查你在命令行中输入的参数是否符合docopt字符串的定义。如果用户提供了错误的参数或参数格式不正确,docopt可能无法正确解析参数。

总结起来,如果一个docopt字符串在使用或不使用可选参数时都不起作用,可能是因为定义有误、参数解析代码有误或用户输入有误。你可以仔细检查这些方面,以确定问题的具体原因,并进行相应的修正。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt

若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 二、使用模式 在上一篇文章中我们提到 docopt 是通过定义一个包含特定内容的字符串,也就是接口描述,来达到描述命令行功能的目的... docopt使用模式中,只有接口描述中定义了对应选项才会被解释为一个带参数的选项, 否则就会被解释为一个选项和一个独立的位置参数。... docopt 中,凡是不符合 --options 约定的词,均会被解释为子命令。...在下面这个例子中,我们支持 create 和 delete 两个子命令,用来创建删除指定路径。...在下面的示例中,使用中括号“()”来对四个互斥选项分组,可以填,填其中一个选项: Usage: my_program go [--up | --down | --left | --right] 我们还可以发散一下思路

63230

让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt

接口描述通常定义一个模块的文档字符串中,我们仍然以 Python 命令行之旅:初探 argparse 的例子为例,讲解如何使用 docopt 来定义接口描述。...-sum 选项则是可选,-h --help 则输出帮助信息。...=True) print(arguments) 由于我们之前是将接口描述定义模块的文档字符串中,那么直接使用 __doc__ 即可获得接口描述。...然后使用 docopt 函数即可解析命令行为参数字典。为了支持负数,我们将 options_first 设置为 True。...四、小节 docopt 的思路非常简单,就是定义接口描述,然后帮你解析命令行为参数字典,接下来就根据这个字典来编写业务逻辑。

33220

玩转 Python 命令行:4 大主流工具库的对比

本文作为本次旅程的终点,希望从一个更高的视角对这些库进行横向对比,总结它们的异同点和使用场景,以期应对不同场景能够分析利弊,选择合适的库为己所用。...若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 二、设计理念 讨论各个库的设计理念之前,我们先设计一个计算器程序,其实这个例子 argparse 库的第一篇讲解中出现过,也就是...对比与 argparse: 对于更为复杂的命令程序,元信息的定义上 docopt 会更加简单 然而在业务逻辑的处理上,由于 argparse 一些简单参数的处理上会更加便捷(比如示例中的情形),相对来说...click 使用装饰器的好处就在于用装饰器优雅的语法将参数定义和处理逻辑整合在一起,从而暗示了路由关系。相比于 argparse 和 docopt 需要自行对解析后的参数来做路由关系,简单了不少。...你都不需要定义参数类型,fire 会根据输入和参数默认值来自动判断,这无疑进一步简化了实现过程。

1.6K10

Google 开源的 Python 命令行库:初探 fire

argparse 是面向过程的,需要先设置解析器,再定义参数,再解析命令行,最后实现业务逻辑。docopt 先用声明式的语法定义出参数,再过程式地解析命令行和实现业务逻辑。...它有如下特性: 能以简单的方式生成 CLI 是一个开发和调试 Python 代码的实用工具 能将现存代码别人的代码转换为 CLI 使得 Bash 和 Python 间的转换变得更容易 通过预先为 REPL...这简直简单的不可思议,为什么这样做就够了?我们不妨考虑下 Python 中的函数,函数是不是可以对应一个命令行程序,而函数的参数可以对应命令行程序的参数和选项呢?...使用 fire.Fire(hello) 即可非常简单快速地实现命令功能,这个命令行就接受 --name 选项,不提供使用默认值 "World",提供就按提供的值来。...使用 fire.Fire(Calculator) 即可非常简单快速地实现命令功能,这个命令行支持两个子命令 double 和 triple,位置参数 NUMBER 选项参数 --number 可在命令行中执行下列命令

50210

零基础用Python | 实现12306火车票实时查询

大家都用过12306,今天我们来学习写一个Python程序,要求命令行敲一行命令来获得你想要的火车票信息。...1 接口设置 先给这个小应用起个名字吧,既然及查询票务信息,那就叫它tickets 我们希望用户只要输入出发站,到达站以及日期就让就能获得想要的信息,所以tickets应该这样被使用: $ tickets...virtualenv建立虚拟环境,用Python3开发, $ virtualenv -p /usr/bin/python3 venv 通过下面的命令激活它: $ . venv/bin/activate 3 解析参数...Python有很多写命令行应用的工具,我们选用docopt这个简单易用的工具,我们先安装它: $ pip3 install docopt docopt可以按我们文档字符串中定义的格式来解析参数, 4...station_version=1.8955 保存stations.html 5 显示结果 prettytable这个库可以让我们它像MySQL数据库那样格式化显示数据 $ pip3 install

82190

Python 命令行之旅:使用 docopt 实现 git 命令

若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 二、git 常用命令 当你写好一段代码增删一些文件后,会用如下命令查看文件状态: git status 确认文件状态后,会用如下命令将的一个多个文件...安装: pip install gitpython 四、思考 实现前,我们不妨先思考下会用到 docopt 的哪些功能?整个程序的结构是怎样的?...docopt 不同于使用 argparse 需要考虑嵌套解析器、各类参数等问题,使用 docopt 只需将我们要实现的 git 命令用接口描述先定义清楚即可。...五、实现 假定我们 docopt-git.py[3] 文件中实现我们的 git 程序。...对比 argparse 的实现版本,你会发现使用 docopt 来实现变得非常简单,子解析器、参数类型什么的统统不需要关心!这可以说是 docopt 最大的优势了。

38830

手把手教你用python抢票回家过年 !(附代码)

接口设计 一个应用写出来最终是要给人使用的,哪怕只是给你自己使用。所以,首先应该想想你希望怎么使用它?让我们先给这个小应用起个名字吧,既然及查询票务信息,那就叫它tickets好了。...我们希望可以提供选项只查询特定的一种几种的火车,所以,我们应该有下面这些选项: -g 高铁 -d 动车 -t 特快 -k 快速 -z 直达 这几个选项应该能被组合使用,所以,最终我们的接口应该是这个样子的...: $ . venv/bin/activate 解析参数 Python有很多写命令行应用的工具,如argparse, docopt, options...这里,我们选用docopt这个简单易用的工具...,我们先安装它: $ pip3 install docopt docopt可以按我们文档字符串中定义的格式来解析参数tickets.py中: 下面我们运行一下这个程序: $ python3 tickets.py...首先我们打开12306,进入余票查询页面,如果你使用chrome,那么按F12打开开发者工具,选中Network一栏,查询框钟我们输入上海到北京,日期2016-07-01, 点击查询,我们调试工具发现

2.3K70

笨办法学 Python · 续 练习 46:`blog`

并不是所有的方法一直有用,这就是为什么我试图教你各种工作策略,不同的程序员使用它们。如果你做这个项目,你发现你做的事情没有起作用,那么你的笔记将帮助你找出原因。...有很多平台,但你可能会喜欢 Wordpress Tumblr。只需使用它一会儿,并记下你可能想要复制的功能。不要太疯狂了。 你将要学习如何使用模板系统来设计 HTML 页面。...我建议你使用 mako jinja 模板系统。这些系统允许你制作模板 HTML 文件,然后你可以根据用户放置目录中的文本文件,将真实内容放入。...在你起步之前,请考虑你的博客工具所做的所有事情,然后设计所需的所有命令及其参数。然后查看docopt项目,来实现这些命令。 你应该使用 mock 来模拟你需要测试的东西,特别是错误情况。...参考我第三部分和第五部分中,我如何使用mock。 除此之外,你可以按照自己的意愿,随意开发这个blog工具。变得有创造力。所有要做的事情是,博客是以某种方式创建的,然后我可以放在要查看的服务器上。

34340

2018年春运火车票今天开售,手把手教你用python抢票回家过年……

接口设计 一个应用写出来最终是要给人使用的,哪怕只是给你自己使用。所以,首先应该想想你希望怎么使用它?让我们先给这个小应用起个名字吧,既然及查询票务信息,那就叫它好了。...我们希望用户只要输入出发站,到达站以及日期就让就能获得想要的信息,所以应该这样被使用: 另外,火车有各种类型,高铁、动车、特快、快速和直达,我们希望可以提供选项只查询特定的一种几种的火车,所以,我们应该有下面这些选项...我们的程序使用Python3开发,下面在你的工作目录下建一个文件夹,进去创建一个虚拟环境: 通过下面的命令激活它: 解析参数 Python有很多写命令行应用的工具,如argparse, docopt,...options...这里,我们选用docopt这个简单易用的工具,我们先安装它: docopt可以按我们文档字符串中定义的格式来解析参数中: 下面我们运行一下这个程序: 我们得到下面的参数解析结果...首先我们打开12306,进入余票查询页面,如果你使用chrome,那么按打开开发者工具,选中一栏,查询框钟我们输入到,日期, 点击查询,我们调试工具发现,查询系统实际上请求了这个URL 并且返回的是格式的数据

1K60

了解 Swift 的 Result 类型

一开始可能感觉语法有点奇怪,这就是为什么我要缓慢地给您热身的原因——这个东西确实很有用,但是如果您深入一探,可能会感觉就像倒退了一步。...取而代之的是,我们需要使我们的方法接受两个参数:一个用于要获取的URL,另一个是将用值调用的完成闭包。这意味着该方法本身返回任何内容。它的数据通过完成关闭传递回去,将来会在某个时候调用。...当我们将闭包传递给函数,Swift需要知道是立即使用它还是以后使用它。如果立即使用默认值——那么Swift很乐意运行闭包。...但是,如果稍后使用它,则可能创建的闭包已被销毁并且不再存在于内存中,在这种情况下,闭包也将被销毁并且无法再运行。 为了解决这个问题,Swift让我们将闭包参数标记为@escaping,这意味着: ?...它为我们提供了更加简洁的API,因为我们现在可以始终确保我们可以得到一个字符串错误——无法同时获得它们两者都不是,因为那不是Result的工作原理。

2.6K20

Python进阶教程001内置数据类型

实际上, 当定义一个 list, tuple dictionary , 您可以总是最后一个元素后面跟上一个逗号, 但是当定义一个只包含一个元素的 tuple 逗号是必须的。...4.字符串格式化通过将 %s 替换成 %d 即可处理整数。 5.试图将一个字符串同一个非字符串连接会引发一个异常。与字符串格式化不同, 字符串连接只能在被连接的每一个都是字符串起作用。...%f 格式符选项被认为是一个十进制浮点数, 指定精度打印 6 位小数。 2.使用包含 ".2" 精度修正符的 %f 格式符选项将只打印 2 位小数。 3.您甚至可以混合使用各种修正符。...2.这里我们知道为什么说是形成一个新的list,因为原来的li这个list没有发生改变。 3.但是如果将新生成的list赋值给li就会改变原有的list。...注意, 分隔符 (“;”) 被完全去掉了, 它没有返回的 list 中的任意元素中出现。 2.split 接受一个可选的第二个参数, 它是要分割的次数。 (可选参数,我们之前讲过)

60520

js中判断数组中是否包含某元素的方法有哪些_js判断数组里面是否包含某个元素

1 2 3 indexOf()完整语法: array.indexOf(item,start) 参数: item:必须。查找的元素。 start:可选的整数参数。规定在字符串中开始检索的位置。...如省略该参数,则将从字符串的首字符开始检索。...开始检索的位置字符串的 fromindex 处字符串的开头(没有指定 fromindex )。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。...find() 方法为数组中的每个元素都调用一次函数执行: 当数组中的元素测试条件返回 true , find() 返回符合条件的元素,之后的值不会再调用执行函数。...,不然是会报错的,另外,该方法某些版本的IE中是不起作用的,因此使用之前需要做一下判断,修改后的代码如下所示: /** * 使用indexOf判断元素是否存在于数组中 * @param {Object

9.9K60

Google 开源的 Python 命令行库:fire 实现 git 命令

按照惯例,我们要像使用 argparse、docopt 和 click 一样使用 fire 来实现 git 命令。...若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~ 二、git 常用命令 当你写好一段代码增删一些文件后,会用如下命令查看文件状态: git status 确认文件状态后,会用如下命令将的一个多个文件...而对于 git add 命令,需要接受任意个参数实例方法中用 *pathspecs 参数来表达。对于 git commit 命令,需要接受 -m 选项,实例方法中用 m 参数来表达。...五、实现 假定我们 fire-git.py[2] 文件中实现我们的 git 程序。 5.1 status 子命令 status 子命令不接受任何参数和选项,因此 status 方法无需任何入参。...对比 argparse、docopt 和 click 的实现版本,你会发现使用 fire 来实现是最简单的: 相较于 argparse,子解析器、参数类型什么的统统不需要关心 相较于 docopt参数解析和命令调用处理也不需要关心

57620

【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

如果类型的所有属性都是可选的,则认为类型是弱类型。更具体地说,弱类型定义一个多个可选属性,没有必需属性,也没有索引签名。...PrettierConfig的所有属性都是可选的,所以完全可以指定它们。相反,咱们的prettierConfig对象有一个semicolons 属性,它在prettierConfig类型中不存在。...在这种情况下,无论将其semicolons 设置为true还是false,咱们的semicolons 属性都不起作用。...TypeScript 的弱类型检测帮助咱们解决了这个问题,并在函数调用中为prettierConfig参数提出了一个类型错误。这样,咱们很快就会意识到有些事情看起来不对劲。...也许一个用例中,这种方法是有意义的,但是通常,咱们应该更喜欢其他解决方案之一。 弱类型检测的限制 请注意,弱类型检测仅在属性中完全没有重叠才会产生类型错误。

1.6K10

Nodejs学习笔记(二)--- 事件模块

当事件发射,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。      ...触发指定事件 参数1:event 字符串,事件名 参数2:可选参数,按顺序传入回调函数的参数 返回值:该事件是否有监听 */ var isSuccess = ee.emit('...1:可选参数,event 字符串,事件名 */ ee.removeAllListeners('some_events'); ee.emit('some_events', 'Wilson', 'Zhong...1:可选参数,event 字符串,事件名 */ ee.removeAllListeners(); ee.emit('some_events', 'Wilson', 'Zhong'); ee.emit...('other_events', 'Wilson', 'Zhong'); 示例代码和传入参数几乎一样,只是调用emitter.removeAllListeners并没有传入指定事件名; 运行结果会发现

1.2K80

ES2019新特性的学习

前言 前端技术更新的实在是太快了,各种框架百花齐放,随着NodeJs不断的兴起,各种构建工具也是层出穷,这不,前两周尤雨溪开源了Vue.js3.0源码之后,很多大佬早已把源码剖析皮都不剩了;昨天NodeJs13.0...arr.flat(Infinity); //[1, 2, 3, 4, 5, 6] 2.String.prototype trimStart and trimEnd js的String类型已经有trim()方法了,起作用时去除字符串前后空格...trimRight() 是这个方法的别名 返回值 一个新字符串,表示从调用字串的末(右)端除去空白 var str=" Hello world "; var str1=str.trimEnd();...console.log(sayHello.toString()); // 打印结果 function sayHello(){ // say Hello alert('hello'); } 5.可选的...catch绑定(Catch Binding) 之前使用try catch的时候,catch有个必须要写的参数 try{ alert(msg); }catch(err){ console.log(

80710

TypeScript系列教程七《接口》

可选属性 和 只读属性 使用TS接口或者类型定义的时候,我们经常会遇到一个属性只有一种场景下需要传递,另一种场景不需要传递,但是传还报错,如果必须传值弄的编程歧义过大。这时候可选属性出现了。...可选链式现代设计语言都会去设计的,配置类型安全去搭配使用。 下面的例子可以看出: ? 学生不需要去使用工作属性,那么这个属性应该可选。 interface Person { study?...可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 这是因为当使用 number来索引,JavaScript会将它转换成string然后再去索引对象。...这意味着当你创建了一个接口继承了一个拥有私有受保护的成员的类这个接口类型只能被这个其子类所实现(implement)。...当你有一个庞大的继承结构这很有用,但要指出的是你的代码只子类拥有特定属性起作用这个子类除了继承至基类外与基类没有任何关系。

60530

深度辨析 Python 的 eval() 与 exec()

1、eval 的基本用法 语法:eval(expression, globals=None, locals=None) 它有三个参数,其中 expression 是一个字符串类型的表达式代码对象,用于做运算...;globals 与 locals 是可选参数,默认值是 None。...值得注意的是,这两者代表真正的命名空间,只在运算起作用,运算后则销毁。...3、一些细节辨析 两个函数都很强大,它们将字符串内容当做有效的代码执行。这是一种字符串驱动的事件 ,意义重大。然而,实际使用过程中,存在很多微小的细节,此处就列出我所知道的几点吧。...所执行的语句中,如果包含 return yield ,它们产生的值也无法 exec 函数的外部起作用

62820

使用 System.CommandLine 分析命令行

System.CommandLine 推出前,缺少内置分析支持意味着,当应用程序启动,你作为开发人员不得不分析参数数组,以确定哪个参数对应于哪个参数类型,再将所有值正确地关联在一起。...虽然 .NET 解决这个问题上做出了大量尝试,但没有一个成为默认解决方案,也没有一个能够很好地扩展为同时支持简单和复杂方案。...确切地说,添加引用时,项目文件被修改为包含生成标准 Main 方法的生成任务,此方法的主体使用反射来调用“自定义”入口点。) 此外,参数并不仅限于字符串。...这些工作包括: 处理配置显示匹配的令牌。 启用 Tab 自动完成的建议处理程序,它根据当前命令行字符串和游标位置返回可能值列表。 希望使用 Tab 自动完成帮助发现的隐藏命令。...此外,如果在使用类似于 Main 的方法方法优先这种方法,可以声明方式添加其他别名(如短别名),那就很棒。

1.1K30
领券