code: def read(self, obj):
          
          path, frag = [], obj
          for part in self.parts:
              path.append(part)
              if isinstance(frag, dict):
                  try:
                      frag = frag[part]
                  except KeyError as error:
                      raise NotFound(':'.join(path)) from error
              elif isinstance(frag, (list, tuple)):
                  try:
                      frag = frag[int(part)]
                  except IndexError as error:
                      raise NotFound(':'.join(path)) from error
                  except ValueError as error:
                      raise WrongType(':'.join(path)) from error
              elif isinstance(frag, (str, int)):
                  raise WrongType(':'.join(path))
              else:
                  raise NotFound(':'.join(path))
          return frag
docs: Returns
              object: fragment