def send_robust(self, sender, **named):
responses = []<EOL>if not self.receivers or self.sender_receivers_cache.get(sender) is NO_RECEIVERS:<EOL><INDENT>return responses<EOL><DEDENT>for receiver in self._live_receivers(sender):<EOL><INDENT>try:<EOL><INDENT>response = receiver(signal=self, sender=sender, **named)<EOL><DEDENT>except Exception as err:<EOL><INDENT>if not hasattr(err, '<STR_LIT>'):<EOL><INDENT>err.__traceback__ = sys.exc_info()[<NUM_LIT:2>]<EOL><DEDENT>responses.append((receiver, err))<EOL><DEDENT>else:<EOL><INDENT>responses.append((receiver, response))<EOL><DEDENT><DEDENT>return responses<EOL>
Send signal from sender to all connected receivers catching errors.

Arguments:

    sender
        The sender of the signal. Can be any python object (normally one
        registered with a connect if you actually want something to
        occur).

    named
        Named arguments which will be passed to receivers. These
        arguments must be a subset of the argument names defined in
        providing_args.

Return a list of tuple pairs [(receiver, response), ... ]. May raise
DispatcherKeyError.

If any receiver raises an error (specifically any subclass of
Exception), the error instance is returned as the result for that
receiver. The traceback is always attached to the error at
``__traceback__``.