我正在尝试将None
关键字作为命令行参数传递给脚本,如下所示,如果我明确提到Category=None
它可以工作,但是当我切换到sys.argv[1]
它失败时,关于如何解决这个问题的任何指示?
category = None --> works
#category=sys.argv[1] --> doesn't work
所以我尝试了如下,仍然无法正常工作
if sys.argv[1].strip()==None:
category = None
else:
category=sys.argv[1].strip()
命令行通道:
script.py None
答案 0 :(得分:4)
正如Stephen所说,None
不是字符串,因此在将str
类型与NoneType
类型进行比较时,结果将始终为False
。
如果我只是在比较的右侧"
附近None
,我们会得到:
import sys
if sys.argv[1].strip() == "None":
category = None
else:
category = sys.argv[1].strip()
print(category)
print(type(category))
导致:
~/temp $ python script.py 123
123
<type 'str'>
~/temp $ python script.py None
None
<type 'NoneType'>
argparse
代替?但是,我建议您使用argparse,如果您有能力这样做的话。我一直都在使用它。
以上代码可以替换为:
import argparse
parser = argparse.ArgumentParser(description='Do some cool stuff.')
def none_or_str(value):
if value == 'None':
return None
return value
parser.add_argument('category', type=none_or_str, nargs='?', default=None,
help='the category of the stuff')
args = parser.parse_args()
print(args.category)
print(type(args.category))
哪个也不会容忍任何参数
~/temp $ python script.py
None
<type 'NoneType'>
~/temp $ python script.py 123
123
<type 'str'>
~/temp $ python script.py None
None
<type 'NoneType'>
它会为您自动格式化一些帮助文本!
~/temp $ python script.py --help
usage: script.py [-h] [category]
Do some cool stuff.
positional arguments:
category the category of the stuff
optional arguments:
-h, --help show this help message and exit
答案 1 :(得分:1)
<强>实施例强>
if sys.argv[1].strip() == 'None':
print "Input Arg is None"
或
func(){<...>}
更快更好的解决方案。
答案 2 :(得分:1)
我认为更合适的方法是检查是否传递了任何参数。如果没有,则将category
设置为None
,否则设置传递的值。
例如:
if len(sys.argv) == 2: // or >= 2 in case of more parameter
category = sys.argv[1].strip()
else:
category = None
因此,如果您只是致电script.py
,则类别将设为None
如果您拨打script.py Value
,则类别将设置为Value
。