2016-08-21 26 views
1

這適用於Python 2.7,但不適用於3.5。NameError:name'file'未定義

def file_read(self, input_text): 

    doc = (file.read(file(input_text))).decode('utf-8', 'replace') 

我想打開這個文件,input_text是一個來自argparse的路徑值。

我得到這個錯誤。

NameError: name 'file' is not defined 

我收集了Python 3.5採用「開放」而不是「文件」,但我不完全得到如何在這樣的情況下使用開放。

+2

,什麼的'STR對象有沒有屬性「改爲」 「必須處理這個?! –

+1

我希望人們在提供負面聲望時會慢一點。剛開始在這裏,不要試圖搞砸。 –

+0

@FredZimmerman是的,我同意你的意見 –

回答

3

您的原始代碼在Python 2.7中工作,但它在那裏是不好的風格。用於此用途的file在很久以前不贊成使用open,而不是調用file.read將文件作爲參數傳遞,您應該在返回的對象上調用.read方法。

寫你的Python 2做的代碼正確的方法是一直

with open(input_text) as docfile: 
    doc = docfile.read().decode('utf-8', 'replace') 

這並不這樣在Python 3工作,因爲open沒有模式現在將默認爲閱讀Unicode文本。此外,它會假定該文件是本地編碼,並使用嚴格的錯誤處理將其解碼。然而,Python 3中實際上使得使用文本文件比在Python 2更容易,因爲你可以通過編碼和錯誤行爲作爲參數傳遞給open本身:

with open(input_text, encoding='utf-8', errors='replace') as docfile: 
    doc = docfile.read()