add exception handler. fixes #4. fixes #5. fixes #6. fixes #7.