Python 使用parser.add_选项时最小化LOC的数量

Python 使用parser.add_选项时最小化LOC的数量,python,Python,我正在使用parser.add_选项到我的optionparser。最初的5个选项现在有13个参数。 因此,我的代码有13行pasrser.add_选项;它还有一行很长的代码来检查每个选项是否为None,如果任何必填字段为空,则抛出parser.error 有没有办法让这句话更简洁 谢谢 ps1:我正在使用python 2.6 ps2:示例代码: usage = "usage: -b <bname> -a <aname> -c <cname> -d <

我正在使用parser.add_选项到我的optionparser。最初的5个选项现在有13个参数。 因此,我的代码有13行pasrser.add_选项;它还有一行很长的代码来检查每个选项是否为None,如果任何必填字段为空,则抛出parser.error

有没有办法让这句话更简洁

谢谢 ps1:我正在使用python 2.6

ps2:示例代码:

usage = "usage:  -b <bname> -a <aname> -c <cname> -d <dname> -i <iname> -t <tname> -r <rname> -k <kname> -s <sname> -e <ename> -f <fname> -g <gname> -u <uname>"
parser=OptionParser(usage)
parser.add_option("-b", "--bname", dest="bname",help="Enter the bname")
parser.add_option("-a", "--aname", dest="aname",help="Is aname required? True/False")
parser.add_option("-c", "--cname", dest="cname", help="Is cname? True/False")
parser.add_option("-d", "--dname", dest="dname", help="Is dname required? True/False")
parser.add_option("-i", "--iname", dest="iname", help="Is iname required? True/False")
parser.add_option("-t", "--tname", dest="tname", help="Is tname required? True/False")
parser.add_option("-r", "--rname", dest="rname", help="Is rname required? True/False")
parser.add_option("-k", "--kname", dest="kname", help="Is kname required? True/False")
parser.add_option("-s", "--sname", dest="sname", help="Is sname required? True/False")
parser.add_option("-e", "--ename", dest="ename", help="Is ename required? True/False")
parser.add_option("-f", "--fname", dest="fname", help="Is fname required? True/False")
parser.add_option("-g", "--gname", dest="gname", help="Is gname required? True/False")
parser.add_option("-u", "--uname", dest="uname", help="Enter your user name")

(options, args) = parser.parse_args()

if(options.bname is None or options.aname is None or options.cname is None or options.dname is None or options.iname is None or options.tname is None or options.rname is None or options.kname is None or options.sname is None or options.ename is None or options.uname is None or options.gname is None or options.fname is None):
     parser.error("-b -v -a -c -d -i -t -r -k -s -e -u -f -g  are all required parameters")
usage=“用法:-b-a-c-d-i-t-r-k-s-e-f-g-u”
parser=OptionParser(用法)
parser.add_选项(“-b”,“--bname”,dest=“bname”,help=“输入bname”)
parser.add_选项(“-a”,“--aname”,dest=“aname”,help=“需要aname吗?True/False”)
parser.add_选项(“-c”,“--cname”,dest=“cname”,help=“Is cname?True/False”)
parser.add_选项(“-d”,“--dname”,dest=“dname”,help=“需要dname吗?True/False”)
parser.add_选项(“-i”,“--iname”,dest=“iname”,help=“需要iname吗?True/False”)
parser.add_选项(“-t”,“--tname”,dest=“tname”,help=“需要tname吗?True/False”)
parser.add_选项(“-r”,“--rname”,dest=“rname”,help=“需要rname吗?True/False”)
parser.add_选项(“-k”,“--kname”,dest=“kname”,help=“需要kname吗?True/False”)
parser.add_选项(“-s”,“--sname”,dest=“sname”,help=“是否需要sname?True/False”)
parser.add_选项(“-e”,“--ename”,dest=“ename”,help=“是否需要ename?True/False”)
parser.add_选项(“-f”,“--fname”,dest=“fname”,help=“是否需要fname?True/False”)
parser.add_选项(“-g”,“--gname”,dest=“gname”,help=“需要gname吗?True/False”)
parser.add_选项(“-u”,“--uname”,dest=“uname”,help=“输入您的用户名”)
(options,args)=parser.parse_args()
如果(options.bname为None或options.aname为None或options.cname为None或options.dname为None或options.tname为None或options.rname为None或options.kname为None或options.sname为None或options.ename为None或options.uname为None或options.fname为None):
错误(“-b-v-a-c-d-i-t-r-k-s-e-u-f-g都是必需的参数”)
使用而不是
optpass

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--bname", "-b", required=True, help="Enter the bname")
parser.add_argument("--aname", "-a", required=True, help="Is aname required? True/False")
parser.add_argument("--cname", "-c", required=True, help="Is cname? True/False")
parser.add_argument("--dname", "-d", required=True, help="Is dname required? True/False")
parser.add_argument("--iname", "-i", required=True, help="Is iname required? True/False")
parser.add_argument("--tname", "-t", required=True, help="Is tname required? True/False")
parser.add_argument("--rname", "-r", required=True, help="Is rname required? True/False")
parser.add_argument("--kname", "-k", required=True, help="Is kname required? True/False")
parser.add_argument("--sname", "-s", required=True, help="Is sname required? True/False")
parser.add_argument("--ename", "-e", required=True, help="Is ename required? True/False")
parser.add_argument("--fname", "-f", required=True, help="Is fname required? True/False")
parser.add_argument("--gname", "-g", required=True, help="Is gname required? True/False")
parser.add_argument("--uname", "-u", required=True, help="Enter your user name")

args = parser.parse_args()

使用argparse:

  • 您不需要指定
    dest
    参数。默认情况下
    dest
    值设置为参数的长选项名称。(例如,
    “--bname”
    导致将
    dest
    设置为
    bname
    ,选项的值可以作为
    args.bname
    访问)
  • 您不需要使用巨大的
    if
    语句;刚定
    required=True

Argparse与所有Python版本>=2.3兼容。它甚至没有管理员权限。本地安装的综合解决方案是使用,但如果您不想达到这个长度,只需将argparse.py放在PYTHONPATH中列出的任何目录中即可安装argparse。

使用而不是
optpasse

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--bname", "-b", required=True, help="Enter the bname")
parser.add_argument("--aname", "-a", required=True, help="Is aname required? True/False")
parser.add_argument("--cname", "-c", required=True, help="Is cname? True/False")
parser.add_argument("--dname", "-d", required=True, help="Is dname required? True/False")
parser.add_argument("--iname", "-i", required=True, help="Is iname required? True/False")
parser.add_argument("--tname", "-t", required=True, help="Is tname required? True/False")
parser.add_argument("--rname", "-r", required=True, help="Is rname required? True/False")
parser.add_argument("--kname", "-k", required=True, help="Is kname required? True/False")
parser.add_argument("--sname", "-s", required=True, help="Is sname required? True/False")
parser.add_argument("--ename", "-e", required=True, help="Is ename required? True/False")
parser.add_argument("--fname", "-f", required=True, help="Is fname required? True/False")
parser.add_argument("--gname", "-g", required=True, help="Is gname required? True/False")
parser.add_argument("--uname", "-u", required=True, help="Enter your user name")

args = parser.parse_args()

使用argparse:

  • 您不需要指定
    dest
    参数。默认情况下
    dest
    值设置为参数的长选项名称。(例如,
    “--bname”
    导致将
    dest
    设置为
    bname
    ,选项的值可以作为
    args.bname
    访问)
  • 您不需要使用巨大的
    if
    语句;刚定
    required=True


Argparse与所有Python版本>=2.3兼容。它甚至没有管理员权限。本地安装的综合解决方案是使用,但如果您不想达到这个长度,只需将argparse.py放在PYTHONPATH中列出的任何目录中,就可以安装argparse;e、 g.您可以更换的所有变体

parser.add_option("-a", "--aname", dest="aname", help="Is aname required? True/False")
打圈

for c in "aitrksefg":
    parser.add_option("-%s" % c, "--%sname" % c, dest="%sname" % c,
                      help="Is %sname required? True/False" % c)
正如Edsger Dijkstra所说,“两个或更多?使用
表示

至于表达

(options.bname is None or options.aname is None or options.cname is None or options.dname is None or options.iname is None or options.tname is None or options.rname is None or options.kname is None or options.sname is None or options.ename is None or options.uname is None or options.gname is None or options.fname is None)
可以缩写

None in (options.bname, options.aname, ...)
甚至更进一步

None in (getattr(options, "%sname" % c) for c in "bacditrkseugf")

正如联合国大学所指出的那样,虽然您实际上并不需要它。

有多种方法可以缩短此代码;e、 g.您可以更换的所有变体

parser.add_option("-a", "--aname", dest="aname", help="Is aname required? True/False")
打圈

for c in "aitrksefg":
    parser.add_option("-%s" % c, "--%sname" % c, dest="%sname" % c,
                      help="Is %sname required? True/False" % c)
正如Edsger Dijkstra所说,“两个或更多?使用
表示

至于表达

(options.bname is None or options.aname is None or options.cname is None or options.dname is None or options.iname is None or options.tname is None or options.rname is None or options.kname is None or options.sname is None or options.ename is None or options.uname is None or options.gname is None or options.fname is None)
可以缩写

None in (options.bname, options.aname, ...)
甚至更进一步

None in (getattr(options, "%sname" % c) for c in "bacditrkseugf")

尽管正如unutbu所指出的,您实际上并不需要它。

这段代码从一个简单的字母列表中构造用法和选项,以及测试。Python直接使用循环来执行重复性任务

from optparse import OptionParser

alist = list('abcdef')

usage = ['usage: ']
for a in alist:
    usage.append('-%s <%sname>'%(a,a))
usage = ' '.join(usage)
# could also be written as a comprehension

parser = OptionParser(usage)
for a in alist:
    parser.add_option('-%s'%a, '--%sname'%a, dest='%sname'%a,help='%s help'%a)

(options,args) = parser.parse_args()

errormsg = usage  # just to keep things simple for this example
for a in alist:
    if getattr(options,'%sname'%a) is None:
        parser.error(errormsg)
print options
从optpasse导入OptionParser
alist=list('abcdef')
用法=['usage:']
对于入围者:
用法.append('-%s'(a,a))
用法=“”。加入(用法)
#也可以写为理解
parser=OptionParser(用法)
对于入围者:
parser.add_选项('-%s'%a',-%sname'%a,dest='%sname'%a,help='%s帮助'%a)
(options,args)=parser.parse_args()
errormsg=usage#只是为了简化本例的操作
对于入围者:
如果getattr(选项“%s名称“%a”)为无:
parser.error(errormsg)
打印选项

argparse.py
可以下载并与2.7之前的Python一起使用。主要的优点是,
argparse
可以为您处理使用和错误测试。

这段代码构建了使用和选项,以及从简单的字母列表中进行的测试。Python直接使用循环来执行重复性任务

from optparse import OptionParser

alist = list('abcdef')

usage = ['usage: ']
for a in alist:
    usage.append('-%s <%sname>'%(a,a))
usage = ' '.join(usage)
# could also be written as a comprehension

parser = OptionParser(usage)
for a in alist:
    parser.add_option('-%s'%a, '--%sname'%a, dest='%sname'%a,help='%s help'%a)

(options,args) = parser.parse_args()

errormsg = usage  # just to keep things simple for this example
for a in alist:
    if getattr(options,'%sname'%a) is None:
        parser.error(errormsg)
print options
从optpasse导入OptionParser
alist=list('abcdef')
用法=['usage:']
对于入围者:
用法.append('-%s'(a,a))
用法=“”。加入(用法)
#也可以写为理解
parser=OptionParser(用法)
对于入围者:
parser.add_选项('-%s'%a',-%sname'%a,dest='%sname'%a,help='%s帮助'%a)
(options,args)=parser.parse_args()
errormsg=usage#只是为了简化本例的操作
对于入围者:
如果getattr(选项),%sname'