我在这里有一个难题,试图弄清楚机器上发生了什么。这是我的代码:
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!
之后!为什么会这样?
答案 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: