<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def configure( self, conf=None, targets=None, logger=None, callconf=False, keepstate=None, modules=None ):
 """Apply input conf on targets objects. Specialization of this method is done in the _configure method. :param conf: configuration model to configure. Default is this conf. :type conf: Configuration, Category or Parameter :param Iterable targets: objects to configure. self targets by default. :param Logger logger: specific logger to use. :param bool callconf: if True (False by default), the configuration is used in the callable target parameters while calling it. :param bool keepstate: if True (default), do not instanciate sub objects if they already exist. :param list modules: modules to reload before. :return: configured targets. :rtype: list :raises: Parameter.Error for any raised exception. """


        result = []

        self.loadmodules(modules=modules)
        modules = []

        conf = self._toconf(conf)

        if conf is None:
            conf = self.conf

        if targets is None:
            targets = self.targets

        if logger is None:
            logger = self.logger

        if keepstate is None:
            keepstate = self.keepstate

        for target in targets:

            try:
                configured = self._configure(
                    conf=conf, logger=logger, target=target, callconf=callconf,
                    keepstate=keepstate, modules=modules
                )

            except Exception:
                if logger is not None:
                    logger.error(
                        'Error {0} raised while configuring {1}/{2}'.format(
                            format_exc(), self, targets
                        )
                    )

            else:
                result.append(configured)

        return result