带整数参数的Optparse

4 投票
2 回答
6100 浏览
提问于 2025-04-17 09:35

我遇到了一个有趣的错误:

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:

这样写是完全可以的。

撰写回答