Since Communicator is typically used with an EventDispatcher, it can be
inconvenient to just throw exceptions out. Handling them would require
wrapping the EventDispatcher's tick call in a try block, and the exact
source of the exception would be lost.