我正在研究如何使用setup.py使用'use_2to3‘属性从python2源自动生成python3代码。我的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‘实用程序没有检测到这一点,并且没有对代码进行任何修改。不幸的是,我在整个代码中都使用了这个成语。
这是“2到3”中的错误吗?
发布于 2013-08-16 14:32:43
使用open而不是file。
在Python2.x中使用file()而不是open()是很有诱惑力的--特别是对于那些具有OO背景的人。file()调用类似于调用用于创建文件对象的构造函数。但是,总是建议使用open()函数。这可能就是为什么2to3不解决这个问题的原因。
在Python3中,file是未知的。文件对象属于_io.TextIOWrapper类:
>>> f = open('a.txt', 'w')
>>> type(f)
<class '_io.TextIOWrapper'>
>>> f.__class__.__name__
'TextIOWrapper'https://stackoverflow.com/questions/18269823
复制相似问题