Dim*_*iev 5 porting python-2to3 python-2.7 python-3.x
我有一个调用的遗留代码class TiffFile(file)。python3的调用方式是什么?
我尝试在 python2 中替换以下内容:
class TiffFile(file):
def __init__(self, path):
file.__init__(self, path, 'r+b')
Run Code Online (Sandbox Code Playgroud)
在python3中是这样的:
class TiffFile(RawIOBase):
def __init__(self, path):
super(TiffFile, self).__init__(path, 'r+b')
Run Code Online (Sandbox Code Playgroud)
但现在我得到了TypeError: object.__init__() takes no parameters
RawIOBase.__init__不接受任何参数,这就是你的错误所在。
您的TiffFile实现还继承了file一个构造函数,而不是一个类,因此您的 Python 2 实现是不惯用的,有人甚至可能声称它是错误的。您应该使用open而不是file,并且在类上下文中您应该使用io模块类进行输入和输出。
您可以使用返回一个文件对象来使用,就像在 Python 2.7 中open使用一样,也可以在Python 2和Python 3中使用来访问文件流,就像使用.fileio.FileIOopen
所以你的实现会更像是:
import io
class TiffFile(io.FileIO):
def __init__(self, name, mode='r+b', *args, **kwargs):
super(TiffFile, self).__init__(name, mode, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这应该适用于当前支持的所有 Python 版本,并允许您使用与旧实现相同的接口,同时更加正确和可移植。
您实际上是r+b在 Windows 上以读写二进制模式打开文件吗?rb如果您不写入文件,而只是读取 TIFF 数据,则可能应该使用模式。rb将以二进制模式打开文件以供只读。附加+设置文件以读写模式打开。
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |