当没有提供optpars选项时如何给出错误

2024-04-19 21:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图弄清楚如何使用optparse,但遇到了一个问题。在

我的脚本(由这个简化的示例表示)接受一个文件,并根据解析到该文件的选项对其执行不同的操作。如果没有解析任何选项,则不会执行任何操作。在

因此,如果用户没有给出任何选项,那么应该给出一个错误。我不知道怎么做。在

我读过,选项应该是可选的,而不是必需的。这是否意味着我用错了选择?如果是这样,我该怎么做呢?我看不出别的办法了。在

#!/usr/bin/python

from optparse import OptionParser

dict = {'name': foo, 'age': bar}

parser = OptionParser()

parser.add_option("-n", "--name", dest="name")
parser.add_option("-a", "--age", dest="age")

(options, args) = parser.parse_args()

if options.name:
    dict['name'] = options.name

if options.age:
    dict['age'] = options.age

print dict

#END

Tags: 文件nameaddparserageif选项args
3条回答

程序的必需的参数通常不带标志,即:

munch <filename>

而不是:

^{pr2}$

此自定义确保用户意识到<filename>是必需的,而不是可选的。parse_args返回options对象和剩余参数列表-那些没有标志的参数。如果该列表对您来说足够短(即没有文件名,而您期望的是一个文件名),可以随意抛出一个错误,您可以使用optparse的功能来显示用法。在

parse_args方法将占用命令行上的所有选项(紧跟在脚本名称后面以-或开头的文本(如果该特定选项定义为具有值,则包含一个值)。在解析了所有可能的选项之后,剩下的所有内容都称为“位置参数”。这些可以像平常一样访问系统argv[1:]列表。因此,不是“可选”的参数(如您的要求所示),应该是位置参数,而不是“选项”的一部分,也就是说,它们不应该是形式

myscript.py someopt=mandatory

但是

myscript.py someopt someotheropt <madatory arg1> <mandatory arg2>

知道了这一点,您可以很容易地为系统argv在pars_args调用之后(例如,如果剩余的argv没有两个必需的arg,则抛出错误)

我不知道我是否会说它是“错误的”,但是的,你使用的选项不是故意的。(对于快速脚本,我也这样做过)考虑让第一个非选项参数成为一个命令字,指定脚本应该做什么;如果希望允许脚本执行多个操作,可以使用多个非选项参数。这就是git(或Subversion,或许多其他版本控制系统)的方式,例如:

git status

检查文件的状态,或

^{pr2}$

保存正在进行的工作的副本,或

git commit

将更改提交到存储库。第一个非选项参数指定要执行的操作。如果这样做,那么通过检查从parser.parse_args()返回的args的长度,就很容易看出是否没有提供命令。在

相关问题 更多 >