code: def execute(self, logger: Logger, options: Dict[str, Dict[str, Any]]) -> T:
          
          try:
              res = self._execute(logger, options)
          except Exception as e:
              raise ParsingException.create_for_caught_error(self.parser, self.obj_type, self.obj_on_fs_to_parse, e,
                                                             options)
  
          # Check that the returned parsed object has the correct type
          if res is not None:
              if robust_isinstance(res, self.obj_type):
                  return res
  
          # wrong type : error
          raise WrongTypeCreatedError.create_for_wrong_result_type(self.parser, self.obj_type, self.obj_on_fs_to_parse,
                                                                   res, options)
docs: Called to parse the object as described in this parsing plan, using the provided arguments for the parser.
          * Exceptions are caught and wrapped into ParsingException
          * If result does not match expected type, an error is thrown
  
          :param logger: the logger to use during parsing (optional: None is supported)
          :param options: a dictionary of option sets. Each option set is identified with an id in the dictionary.
          :return: