2012-05-12 120 views
2

我正在通過我的方式學習Python的艱難之路並被困在練習16的額外功勞上。我嘗試閱讀使用主練習創建的文件16.我寫的代碼如下:TypeError:需要字符串或緩衝區,找到列表

# pylint: disable-msg=C0103 
""" This script reads and prints a file set from the argv """ 
from sys import argv 

filename = argv 

txt = open(filename) 

print txt.read() 

我想讀的文件是:

Derp Derp 
Reading this file 
Will it work? 

我收到的錯誤:類型錯誤:強迫爲Unicode:需要字符串或緩衝區,列表發現但我不確定我的文件是如何列表而不是字符串。

回答

6

要調試,嘗試打印filename

+4

哇,謝謝!通過打印文件名,我發現文件名是一個數組,或者我認爲Python把它稱爲一個列表?無論如何,我通過將'filename = argv'更改爲'script,filename = argv'來完成解壓縮argv,並且一切都很順利。我感謝你教我做飯,而不是餵我。 –

4

argv是腳本的參數列表。第一個參數是argv[1]。試試這個:

from sys import argv 

txt = open(argv[1]) 

print txt.read() 

重要提示:幾乎總是在列表中的第一項是0個項,argv是個例外,因爲0個參數是你的腳本名稱。

+0

這是有道理的,我不知道這就是如何argv的工作,我交替改變'filename = argv'爲'script,filename = argv'。我很欣賞這個答案,並且只選擇了dbr作爲正確的答案,因爲我將能夠使用該答案作爲調試未來我遇到的問題的靈感。 –

0

我也面臨着同樣的錯誤,但與此代碼解決了這個問題:

from sys import argv 

txt = open(argv[1]) 

print txt.read() 
相關問題