2011-08-26 105 views
1

我想用我的计划是这样的:Python:如何处理argparse的异常?

pythonScript -f文件名

但是,如果我忘了-f,我仍然希望得到的文件名。

所以我想这个“pythonScript文件名”也行 -

我知道这一定是容易的(>我可以从args.fileName或处理异常获取文件名),我只是找不到一个方法来做到这一点。任何人都可以帮助我?谢谢

import argparse 
parser = argparse.ArgumentParser(prog='PROG') 
parser.add_argument('-f', action='store', dest='fileName', 
    default = None, type=str, help='The file name') 

try: 
    args = parser.parse_args() 
except: 
    print "xxx" 
+0

这是预期的和良好的。 ' - *'是一个标志,*选项* - 它不是必需的。另外,你从未说过它应该是必需的,恰恰相反,你甚至提供了一个默认值。 – delnan

+0

哦,我的意思是如果我忘记-f,我仍然想要获取文件名。对不起,感谢 – TMS

回答

3

如果你想-f是必需的,你可以用argparse这样做。只需在add_argument函数中包含“required = True”即可。

请记住,必需的选项是矛盾的。建议不要求做出选择,但有时候会有所帮助。如果没有给出该选项,那么目的地仍然是None值(或者它被分配了你给出的任何默认值,在你的例子中是None)。

编辑:刚才看到你的编辑,我明白你现在问什么。 optparse使这个更简单的国际海事组织。它似乎与argparse的位置参数,你需要使用add_argument。

真的没有简单的方法让argparse为你做。你可以用下面的一点点创造性模仿它:

parser = argparse.ArgumentParser() 
parser.add_argument('file', nargs='?') 
parser.add_argument('-f', dest='file_opt') 
args = parser.parse_args() 
if args.file_opt: 
    args.file = args.file_opt 

基本上,如果有一个给定的文件选项,它将覆盖的位置参数。

+0

感谢,但我真的希望-f是可选的,请参阅我更新的问题 – TMS

+0

谢谢,它的工作原理 – TMS