Improve error reporting

We need to defer raising our exception because it could hide an ImportError. It'd be nice not to use traceback.print_stack and raise an exception with the correct traceback, but six.reraise doesn't show the whole traceback.