首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python 3和文件对象

python 3和文件对象
EN

Stack Overflow用户
提问于 2013-08-16 09:13:06
回答 1查看 634关注 0票数 1

我正在研究如何使用setup.py使用'use_2to3‘属性从python2源自动生成python3代码。我的setup.py脚本包括以下语句:

代码语言:javascript
复制
VERSION = None
with file('version','rt') as FF:
    VERSION = FF.read().lstrip().rstrip()
print("VERSION %s" % (VERSION) )

当我输入'python3 setup.py build‘时,我会得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "setup.py", line 18, in <module>
    with file('version','rt') as FF:
NameError: name 'file' is not defined

我理解它是正确的,因为文件对象已经不存在了,我应该将它更改为'open()‘。

需要注意的是,'2to3‘实用程序没有检测到这一点,并且没有对代码进行任何修改。不幸的是,我在整个代码中都使用了这个成语。

这是“2到3”中的错误吗?

EN

回答 1

Stack Overflow用户

发布于 2013-08-16 14:32:43

使用open而不是file

在Python2.x中使用file()而不是open()是很有诱惑力的--特别是对于那些具有OO背景的人。file()调用类似于调用用于创建文件对象的构造函数。但是,总是建议使用open()函数。这可能就是为什么2to3不解决这个问题的原因。

在Python3中,file是未知的。文件对象属于_io.TextIOWrapper类:

代码语言:javascript
复制
>>> f = open('a.txt', 'w')
>>> type(f)
<class '_io.TextIOWrapper'>
>>> f.__class__.__name__
'TextIOWrapper'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18269823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档