NameError:name' file'没有定义

时间:2016-08-21 19:03:00

标签: python file python-3.x

这适用于Python 2.7但不适用于3.5。

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使用"打开"而不是"文件",但在这种情况下,我不太了解如何使用open。

1 个答案:

答案 0 :(得分: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文本。此外,它会假设文件采用本机编码,并使用 strict 错误处理对其进行解码。但是,Python 3实际上比使用Python 2更容易处理文本文件,因为您可以将编码和错误行为作为参数传递给open本身:

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