2011-09-21 52 views
2

我想在Python中使用optparser輸入路徑。不幸的是,這段代碼不斷顯示錯誤。Python OptParser

import optparse,os 

parser = optparse.OptionParser() 
parser.add_option("-p","--path", help = "Prints path",dest = "Input_Path", metavar = "PATH") 

(opts,args) =parser.parse_args() 

print os.path.isdir(opts.Input_Path) 

錯誤: -

 
Traceback (most recent call last): 
    File "/Users/armed/Documents/Python_Test.py", line 8, in 
    print os.path.isdir(opts.Input_Path) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py", line 41, in isdir 
    st = os.stat(s) 
TypeError: coercing to Unicode: need string or buffer, NoneType found 

任何幫助,非常感謝!

+0

你確定使用「-p something」來調用你的腳本嗎? –

+0

是的,我。我輸入它作爲一個字符串,但我認爲它被存儲爲一個列表,因爲當我在opts.Input_Path中輸入一個文件並打印文件時,它顯示輸入的字母爲我輸入的任何內容。你知道這是爲什麼嗎?我只是希望它打印路徑指向的目錄中的文件 – Amritha

+0

字符串是一個可迭代的對象,就像列表一樣。 「for a_string」將循環字符串的字符。使用opts.Input_Path本身來代替for循環。 –

回答

2

我複製你的腳本並運行它。看起來你打電話給你的腳本以錯誤的方式:

$ python test.py /tmp 
Traceback (most recent call last): 
    File "test.py", line 8, in <module> 
    print os.path.isdir(opts.Input_Path) 
    File "/usr/lib/python2.6/genericpath.py", line 41, in isdir 
    st = os.stat(s) 
TypeError: coercing to Unicode: need string or buffer, NoneType found 

$ python test.py --path /tmp 
True 
+0

非常感謝!這真的有幫助。 :) – Amritha

3

該錯誤是因爲opts.Input_PathNone,而不是被你的路徑字符串/ Unicode的。

您確定要正確調用腳本嗎?在任何情況下,您都應該輸入一些錯誤檢查代碼,以確保如果用戶不是 put -p,程序不會只是崩潰。

或者,將其更改爲一個位置參數,使其由optparse「必要」: http://docs.python.org/library/optparse.html#what-are-positional-arguments-for

編輯:也optparse已被棄用,你可能想使用argparse一個新的項目。

+0

會檢查出來!謝謝:)是的,我稱它是錯誤的方式。 – Amritha

+1

你的意思是'argparse'? http://docs.python.org/dev/library/argparse.html –

+0

如果這是問題,你應該將其中的一個標記爲讓社區知道的答案:) – Dave