I mean chose a small number of common things to check explicitly and raise an informative WrapperError, but otherwise let uncommon things fall out with whatever error it was going to raise anyway.  So - yes - self.frames already got minimally checked in the __init__ .  In this case - for the sake of code simplicity - we could just let it generate an AttributeError for odd stuff like missing DimensionIndexValues or whatever, using the concise version:

    frame_indices = np.array(frame.FrameContentSequence[0].DimensionIndexValues
                           for frame in self.frames])