diff --git a/nova/exception.py b/nova/exception.py index d332ef5ea24c..a8fcd354ea45 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -23,6 +23,7 @@ SHOULD include dedicated exception logging. """ from oslo_log import log as logging +import six import webob.exc from webob import util as woutil @@ -77,15 +78,16 @@ class NovaException(Exception): except AttributeError: pass - if not message: - try: + try: + if not message: message = self.msg_fmt % kwargs - - except Exception: - # NOTE(melwitt): This is done in a separate method so it can be - # monkey-patched during testing to make it a hard failure. - self._log_exception() - message = self.msg_fmt + else: + message = six.text_type(message) + except Exception: + # NOTE(melwitt): This is done in a separate method so it can be + # monkey-patched during testing to make it a hard failure. + self._log_exception() + message = self.msg_fmt self.message = message super(NovaException, self).__init__(message) diff --git a/nova/tests/unit/test_exception.py b/nova/tests/unit/test_exception.py index 5499bce883e5..f3644cf44971 100644 --- a/nova/tests/unit/test_exception.py +++ b/nova/tests/unit/test_exception.py @@ -153,6 +153,8 @@ class NovaExceptionTestCase(test.NoDBTestCase): def test_error_msg(self): self.assertEqual('test', six.text_type(exception.NovaException('test'))) + self.assertEqual('test', + exception.NovaException(Exception('test')).message) def test_default_error_msg_with_kwargs(self): class FakeNovaException(exception.NovaException):