gpt4 book ai didi

python - 以 h5py 对象作为实例变量的令人费解的赋值行为

转载 作者:行者123 更新时间:2023-11-28 17:52:23 25 4
gpt4 key购买 nike

我正在使用 h5py 访问 HDF5 文件并将 h5py File 对象存储在一个类中。但是我在尝试用一个新的重新分配一个关闭的 h5py 文件实例变量时遇到了一些奇怪的行为:

class MyClass:
def __init__(self, filename):
self.h5file = None
self.filename = filename

def vartest(self):
self.h5file = h5py.File(self.filename, 'r')
print self.h5file
self.h5file.close()
print self.h5file
newh5file = h5py.File(self.filename, 'r')
print newh5file
self.h5file = newh5file
print self.h5file
print newh5file

def main():
filename = sys.argv[1]
mycls = MyClass(filename)
mycls.vartest()

输出:

<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<Closed HDF5 file>

尝试用新打开的 h5py File 对象更新实例变量似乎以某种方式影响了对象的状态,将其关闭。无论 h5py 端的实现如何,根据我对 Python 语言的理解,我看不出这种行为有何意义(即,没有重载赋值运算符)。

此示例使用 Python 2.6.5 和 h5py 1.3.0 运行。如果您想尝试这个示例但没有 HDF5 文件,您可以将文件访问模式从“r”更改为“a”。

最佳答案

是的,这是 h5py 1.3 中的一个已知错误,当​​您使用 HDF5 1.8.5 或更新版本时会出现该错误。它与 1.8.5 中标识符处理方式的变化有关。您可以使用 HDF5 1.8.4 或更早版本或升级到 h5py 2.0 来修复它。

关于python - 以 h5py 对象作为实例变量的令人费解的赋值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7355545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com