emit error events instead of throwing where possible