处理docopt python时出现参数错误

处理docopt python时出现参数错误,python,Python,如果我的脚本没有解析任何参数,我正在尝试解决如何打印使用信息。我正试图通过docopt实现这一点。下面是我的代码,它的工作原理与预期的一样,但如果没有解析参数或参数不正确,我就无法计算出需要添加什么来打印用法。(空白论点等)如有任何帮助,将不胜感激 #!/usr/bin/python """ Description: Compare 2 lists and print the common values. Usage: Checker.py Checker.py [(-a <li

如果我的脚本没有解析任何参数,我正在尝试解决如何打印使用信息。我正试图通过docopt实现这一点。下面是我的代码,它的工作原理与预期的一样,但如果没有解析参数或参数不正确,我就无法计算出需要添加什么来打印用法。(空白论点等)如有任何帮助,将不胜感激

#!/usr/bin/python

"""
Description:

Compare 2 lists and print the common values.

Usage: Checker.py
  Checker.py [(-a <list1>) (-g <list2>)]
  Checker.py -h | --help
  Checker.py --version


Options:
   -a --list1         List1
   -g --list2         List2
   -h --help          Show this screen.
   --version          Show version.
"""

def getlist1(one):
    first_list = open(one).readlines()
    return [s.replace('\n', '') for s in first_list]

def getlist2(two):
    second_list = open(two).readlines()
    return [s.replace('\n', '') for s in second_list]

def checklist(list1, list2):
    return list(set(one_set) & set(two_set))    


if __name__ == "__main__":
    from docopt import docopt
    arguments = docopt(__doc__, version= '1')

    list_one = getlist1(arguments['<list1>'])
    list_two = getlist2(arguments['<list2>'])   
    found_items = checklist(list1, list2)
    found_items.sort()
    for item in found_items:
        print item              
#/usr/bin/python
"""
说明:
比较两个列表并打印常用值。
用法:Checker.py
Checker.py[(-a)-g]
Checker.py-h |--帮助
Checker.py--版本
选项:
-a--列表1列表1
-g—列表2列表2
-h--帮助显示此屏幕。
--版本显示版本。
"""
def getlist1(一个):
first_list=打开(一个).readlines()
返回[s.replace('\n','')用于第一个\u列表中的s]
def getlist2(两个):
第二个列表=打开(两个).readlines()
返回[s.replace('\n','')用于第二个\u列表中的s]
def检查表(列表1、列表2):
退货清单(一套(一套)和两套(两套))
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
参数=docopt(\uuuudoc\uuuuu,版本='1')
list_one=getlist1(参数['''])
list_two=getlist2(参数[''])
找到的项目=检查表(列表1、列表2)
找到\u项。排序()
对于找到的项目中的项目:
打印项目

我不确定这是否完全回答了您的问题,但我希望这能有所帮助

如果在没有任何参数的情况下运行脚本,
arguments[''']
arguments[''']
都计算为
None
。因此:

# ...

if __name__ == "__main__":
    from docopt import docopt
    arguments = docopt(__doc__, version= '1')

    if arguments['<list1>'] == None or arguments['<list2>'] == None:
        print __doc__
        exit(0)

    list_one = getlist1(arguments['<list1>'])
    list_two = getlist2(arguments['<list2>'])   
    found_items = checklist(list1, list2)
    found_items.sort()
    for item in found_items:
        print item    
#。。。
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
参数=docopt(\uuuudoc\uuuuu,版本='1')
如果参数['']==无或参数['']==无:
打印文件__
出口(0)
list_one=getlist1(参数['''])
list_two=getlist2(参数[''])
找到的项目=检查表(列表1、列表2)
找到\u项。排序()
对于找到的项目中的项目:
打印项目

您允许使用
Checker.py
(不带任何参数)作为使用模式。此外,用方括号包围
(-a)-g
,可以省略它们

Description:

Compare 2 lists and print the common values.

Usage:
  Checker.py (-a <list1>) (-g <list2>)
  Checker.py -h | --help
  Checker.py --version


Options:
   -a --list1         List1
   -g --list2         List2
   -h --help          Show this screen.
   --version          Show version.
在这种情况下,, 有效的程序调用可以不带参数,也可以带 2个论点


这确实解决了这个问题,但是我认为有一些Dopopt魔法检测到参数是错误的,我只是没有正确使用或配置我的用法。考虑使用<代码>不是< < /代码>,而不是<代码> = = NON/COM>:-我修改了我的用法,但是如果不提供参数,就会得到这个错误。代码>强制转换为Unicode:需要字符串或缓冲区,未找到任何类型我希望打印使用信息。嗯,这是因为
参数[''']
参数['''']
。你能再检查一下这个的用法吗?这个程序适合我。好吧,docopt无法捕获由None(未给出参数)引起的错误并打印使用情况?如果是这样的话没问题,我只是想知道它是否是poss。不,docopt捕获参数错误并打印用法。把你的帮助信息和我的联系起来。
Usage: my_program [(<one-argument> <another-argument>)]