Optparse与整数参数

4
我遇到了以下有趣的错误:
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)。问题在于0False

我应该将其更改为:

if options.number is not None:

还是需要更高级一点的东西?

@MarceloCantos 是的,我问这个问题是因为应用程序可能看起来不专业。 - xralf
我为了纪念一个旧工作而保留了一份打印输出。它需要几百行代码,涉及多个函数(更不用说两三个工作流程图),才能比较两个日期并在其中一个日期在另一个日期之前时引发错误。"不专业"(或"复杂")的概念永远不应该出现。使用最简单有效的方法即可。请注意,我并不是在批评问题本身;这是一个合理的问题。但当其他人担心他们的代码不够复杂时,我会感到紧张。 - Marcelo Cantos
2个回答

4
在Python中,整数可以用作布尔值,而任何非零值都会被解析为 True ,而 0 则为 False 。因此,如果您想检查选项 --number 是否设置,您必须检查 None (这意味着该选项未设置)。
所以:
if options.number is not None:

完全没有问题。


2
另外,考虑使用argparse模块代替optparse,因为后者自Python 2.7起已被弃用。argparse文档的最后一节是关于升级optparse代码的内容:http://docs.python.org/library/argparse.html。但我不知道它如何解决您特定的问题。

谢谢。我没有兴趣阅读关于argparse的长网页,但有关升级的部分似乎可以加速在argparse和optparse之间的切换。 - xralf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接