<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def printer(self):
 """ Returns a printer that was defined in the config, or throws an exception. This method loads the default config if one hasn't beeen already loaded. """

        if not self._has_loaded:
            self.load()

        if not self._printer_name:
            raise exceptions.ConfigSectionMissingError('printer')

        if not self._printer:
            # We could catch init errors and make them a ConfigSyntaxError,
            # but I'll just let them pass
            self._printer = getattr(printer, self._printer_name)(**self._printer_config)

        return self._printer