2012-01-05 33 views
4

我打了以下有趣的错误: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)。问题是0False

我应该将其更改为:

if options.number is not None: 

或一些更复杂?

+1

这是否改变了工作? – 2012-01-05 11:41:10

+0

@MarceloCantos是的,我问,因为该应用程序可能看起来不专业。 – xralf 2012-01-05 11:54:31

+0

我为了后代保留了旧作业的印刷品。在几个函数上(比较两个或三个工作流程图),需要几百行来比较两个日期,如果一个先于另一个,则会产生错误。 “不专业”(或“复杂”)的概念不应该包含在其中。使用最简单的工作,时间段。请注意,我不是在批评这个问题。这是一个合理的问题。但是当别人担心他们的代码不够复杂时,我会感到紧张。 – 2012-01-05 21:51:05

回答

4

在Python中,整数可以用作布尔值,而非零的任何东西都可以解析为True0False。因此,如果您想检查是否设置了选项--number,则必须检查None(这意味着该选项未设置)。

所以:

if options.number is not None: 

是完全没有问题。

2

另外,考虑使用argparse模块而不是optparse,因为后者自Python 2.7以来已被弃用。在argparse文档的最后一部分是有关升级optparse代码:

http://docs.python.org/library/argparse.html

我不知道如何与您的特定问题,但涉及。

+0

谢谢。我没有兴趣阅读一个冗长的网页,但有关升级的部分似乎加快了argparse和optparse之间的转换。 – xralf 2012-01-05 20:04:41