为什么 if 测试无法使用我的解析 arg?
Why does if test fail to work with my parsing arg?
我在这里遇到了一个难题,试图弄清楚机器中发生了什么。这是我的代码:
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
在终端中。
现在打印语句产生:
False <type 'str'> <type 'str'>
在我的终端中,但 if 测试给出:
Failed to provide f, filename or both!
紧接着!为什么会这样?
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:
我在这里遇到了一个难题,试图弄清楚机器中发生了什么。这是我的代码:
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
在终端中。
现在打印语句产生:
False <type 'str'> <type 'str'>
在我的终端中,但 if 测试给出:
Failed to provide f, filename or both!
紧接着!为什么会这样?
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: