Argparse使用默认值而不是参数

时间:2015-07-09 20:38:29

标签: python argparse

我试图使用Python argparse中的默认值而不是用户指定的参数。例如,这是一个论点:

parser.add_argument(' - fin',默认=' file.txt')

如果用户调用--fin dog,那显然不是文件,所以我希望能够使用默认值。我该怎么办? argparse是否有一个使用默认值而不是输入参数的函数?对于任何打字错误也很抱歉,我在手机上这样做。

3 个答案:

答案 0 :(得分:4)

使用parser.parse_args()的返回值无法访问默认参数。更重要的是,“狗”显然不是一个文件?这是任何现代操作系统上完全有效的文件名;文件扩展名很常见,但绝不是必需的。

确定某些内容是否为文件的唯一方法是尝试打开它。如果失败,则它不是文件,或者您无权访问它。

在这种情况下,最佳解决方案可能是:

DEFAULT_FIN = 'file.txt'
parser.add_argument('--fin', default=DEFAULT_FIN)

后来:

try:
    fd = open(args.fin)
except IOError:
    fd = open(DEFAULT_FIN)

虽然我认为如果用户在命令行中指定文件名并且您无法打开它,那么您应该打印错误并退出。

答案 1 :(得分:0)

你可以:

argument_file = parser.add_argument('--fin', default='file.txt')
args = parser.parse_args()
try:
    fo = open(args.fin)
except:
    fo = open(argument_file.default)
print fo.read()

但是持续不断的larsks解决方案似乎更好。

答案 2 :(得分:0)

如果在定义参数的标识符时挂起参数的标识符,则可以找到参数的默认值。 e.g。

In [119]: parser=argparse.ArgumentParser()
In [120]: arg1 = parser.add_argument('--fin', default='default.txt')
In [121]: arg1.default
Out[121]: 'default.txt'

arg1add_argument方法返回的值是解析器使用的Action对象。它包含您为方法提供的所有信息。 arg1.default只是其中一个属性。

因此,您可以在帖子arg1.default代码中使用parse_args来检查args.fin是否为有效文件。

larsks方法同样出色,因为您(用户)首先定义了默认值。

您还可以编写自定义Action类或执行此检查的参数类型。有一个内置argparse.FileType试图打开该文件,如果不能,则引发ArgumentType错误。可以修改为使用默认值。但这是一个更高级的解决方案,并且明显优于在解析后进行自己的检查。