为什么测试无法使用我的解析arg?

时间:2016-01-15 07:22:14

标签: python argparse

我在这里有一个难题,试图弄清楚机器上发生了什么。这是我的代码:

import argparse, sys
from scitools.StringFunction import StringFunction

parser = argparse.ArgumentParser()

parser.add_argument('--f', '--function', type=str, default=None,\
                    help='Function', metavar='f')
parser.add_argument('--fn', '--filename', type=str, default=None,\
                    help='Filename', metavar='fn')

args = parser.parse_args()

print args.f and args.fn == None, type(args.fn), type(args.f)

if args.f and args.fn == str:
    f = StringFunction(args.f); filename = args.fn 
else:
    print 'Failed to provide f, filename or both!'
    sys.exit(1)

在终端中运行:--f x**2 --fn somename

现在print语句产生:

False <type 'str'> <type 'str'>

在我的终端中,但if测试给出:

Failed to provide f, filename or both!

之后!为什么会这样?

1 个答案:

答案 0 :(得分:2)

args.fn类型str,但您测试args.fn 本身是否等于它的类型。它不可能都是。

你这样做:

>>> type('foo')
<type 'str'>
>>> 'foo' == str
False

改为使用isinstance()

if args.f and isinstance(args.fn, str):

更好的测试是查看args.fn 不是None

if args.f and args.fn is not None: