def load(cls, f):
h = cls()
magic = f.read(8)
if len(magic) != 8 or magic != cls._MAGIC:
raise InvalidModelFormatError('invalid magic value: {0}'.format(str(magic)))
for (key, fmt, _) in cls.fields():
size = struct.calcsize(fmt)
raw = f.read(size)
if len(raw) != size:
raise InvalidModelFormatError('failed to read {0} in header (expected {1} bytes, got {2} bytes)'.format(key, size, len(raw)))
try:
value = struct.unpack(fmt, raw)[0]
except ValueError:
raise InvalidModelFormatError('failed to parse {0} value {1} as {2}'.format(key, str(raw), fmt))
setattr(h, key, value)
return h
评论列表
文章目录