2016-08-21 5 views
1

이것은 Python 2.7에서는 작동하지만 3.5에서는 작동하지 않습니다.NameError : '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 

는 파이썬 3.5 대신에 "파일"의 "열기"사용 수집,하지만 난 꽤 이런 상황에서 열고 사용하는 방법을하지 않습니다.

+2

과 어떤'STR 객체를하는 일은 어떤 속성이 없다 "읽기" '이 일과 관련이 있니?! –

+1

사람들이 부정적인 평판을 내기 위해 조금 더 천천히 노력하길 바란다. 그냥 여기서 시작하고, 일을 망치 려하지 말아요. –

+0

@FredZimmerman 네, 그 점에 동의합니다. –

답변

3

원본 코드는 Python 2.7에서 작동하지만 거기에는 좋지 않은 스타일입니다. 이 사용을위한 file은 오래 전부터 open을 사용하기 위해 더 이상 사용되지 않으며 file.read을 파일로 전달하는 대신 반환 된 개체에 방금 .read 메서드를 호출해야합니다. 모드없이 open 이제 유니 코드 텍스트를 읽는 기본 때문에

파이썬 2에서했던 코드를 작성하는 올바른 방법은,

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

이 파이썬 3에서와 같은 작동하지 않습니다을했을 것이다 . 또한 파일이 기본 인코딩으로되어 있다고 가정하고 strict 오류 처리로 디코딩합니다. 그러나, 파이썬 3가 실제로 open 자체에 인수로 인코딩 및 오류 동작을 전달할 수로, 파이썬이보다 쉽게 ​​텍스트 파일로 작업 할 수 있습니다 :

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