带整数参数的Optparse
我遇到了一个有趣的错误:
parser.add_option("-n", "--number", metavar="NUMBER", type="int",
help="number is NUMBER")
(options, args) = parser.parse_args()
if options.number: # User added a number
do something
exit(0)
过了一段时间,我发现如果数字是0
,我的应用就不工作,但这个数字应该是有效的(应该大于或等于0)。问题在于0
被认为是False
。
我应该把它改成:
if options.number is not None:
还是用更复杂的方法呢?
2 个回答
2
另外,建议你使用argparse模块,而不是optparse,因为后者从Python 2.7开始就不再推荐使用了。argparse文档的最后一部分是关于如何升级optparse代码的:
http://docs.python.org/library/argparse.html
不过,我不太清楚它是如何处理你具体的问题的。
4
在Python中,整数可以当作布尔值使用,也就是说,任何非零的数字都会被认为是 True
(真),而数字 0
则被认为是 False
(假)。所以,如果你想检查选项 --number
是否被设置,你需要和 None
比较(这表示这个选项没有被设置)。
所以:
if options.number is not None:
这样写是完全可以的。