From 9d6deec4ca2f95460ef62b54b7b42f589ef3351e Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sat, 8 Sep 2018 10:20:15 -0700 Subject: [PATCH] Fix AttributeError in ExtensionError In Python 3, the attribute BaseException.message doesn't exist. $ python3 >>> from sphinx.errors import ExtensionError >>> e = ExtensionError('foo') >>> repr(e) Traceback (most recent call last): File "", line 1, in File "sphinx/sphinx/errors.py", line 65, in __repr__ return '%s(%r)' % (self.__class__.__name__, self.message) AttributeError: 'ExtensionError' object has no attribute 'message' --- sphinx/errors.py | 1 + tests/test_errors.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 tests/test_errors.py diff --git a/sphinx/errors.py b/sphinx/errors.py index e97447e86..005605f1c 100644 --- a/sphinx/errors.py +++ b/sphinx/errors.py @@ -55,6 +55,7 @@ class ExtensionError(SphinxError): def __init__(self, message, orig_exc=None): # type: (unicode, Exception) -> None SphinxError.__init__(self, message) + self.message = message self.orig_exc = orig_exc def __repr__(self): diff --git a/tests/test_errors.py b/tests/test_errors.py new file mode 100644 index 000000000..c8cf4b05d --- /dev/null +++ b/tests/test_errors.py @@ -0,0 +1,17 @@ +import sys + +from sphinx.errors import ExtensionError + + +def test_extension_error_repr(): + exc = ExtensionError("foo") + assert repr(exc) == "ExtensionError('foo')" + + +def test_extension_error_with_orig_exc_repr(): + exc = ExtensionError("foo", Exception("bar")) + if sys.version_info < (3, 7): + expected = "ExtensionError('foo', Exception('bar',))" + else: + expected = "ExtensionError('foo', Exception('bar'))" + assert repr(exc) == expected