diff --git a/changelog.d/991.bugfix.rst b/changelog.d/991.bugfix.rst new file mode 100644 index 000000000..473082e82 --- /dev/null +++ b/changelog.d/991.bugfix.rst @@ -0,0 +1 @@ +Fixed the custom ``repr`` for ``dateutil.parser.ParserError``, which was not defined due to an indentation error. (gh issue #991, gh pr #993) diff --git a/dateutil/parser/_parser.py b/dateutil/parser/_parser.py index 7fcfa5457..8d67584c7 100644 --- a/dateutil/parser/_parser.py +++ b/dateutil/parser/_parser.py @@ -1600,8 +1600,9 @@ def __str__(self): except (TypeError, IndexError): return super(ParserError, self).__str__() - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, str(self)) + def __repr__(self): + args = ", ".join("'%s'" % arg for arg in self.args) + return "%s(%s)" % (self.__class__.__name__, args) class UnknownTimezoneWarning(RuntimeWarning): diff --git a/dateutil/test/test_parser.py b/dateutil/test/test_parser.py index 605705e4c..cfa4bbbcc 100644 --- a/dateutil/test/test_parser.py +++ b/dateutil/test/test_parser.py @@ -943,3 +943,12 @@ def test_decimal_error(value): # when constructed with an invalid value with pytest.raises(ParserError): parse(value) + +def test_parsererror_repr(): + # GH 991 — the __repr__ was not properly indented and so was never defined. + # This tests the current behavior of the ParserError __repr__, but the + # precise format is not guaranteed to be stable and may change even in + # minor versions. This test exists to avoid regressions. + s = repr(ParserError("Problem with string: %s", "2019-01-01")) + + assert s == "ParserError('Problem with string: %s', '2019-01-01')"