2012-01-05 65 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