1

我正在研究使用 setup.py 使用“use_2to3”属性从 python 2 源自动生成 python 3 代码。我的 setup.py 脚本包含以下语句:

VERSION = None
with file('version','rt') as FF:
    VERSION = FF.read().lstrip().rstrip()
print("VERSION %s" % (VERSION) )

当我输入“python3 setup.py build”时,我收到错误:

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”实用程序没有检测到这一点,并且保持代码不变。不幸的是,我在整个代码中都使用了这个成语。

这是“2to3”中的错误吗?

4

1 回答 1

0

使用open代替file

在 Python 2.x中使用file()代替是很诱人的——尤其是对于那些具有 OO 背景的人。open()file()调用类似于调用构造函数来创建文件对象。但是,始终建议改用open()函数。2to3这可能是没有破案的原因。

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

>>> f = open('a.txt', 'w')
>>> type(f)
<class '_io.TextIOWrapper'>
>>> f.__class__.__name__
'TextIOWrapper'
于 2013-08-16T14:32:43.893 回答