diff options
author | Mark Bailey <msb@eastface.co.uk> | 2019-12-23 22:46:03 +0000 |
---|---|---|
committer | Paul Ganssle <paul@ganssle.io> | 2020-01-02 12:36:59 -0500 |
commit | 79d2e486a34911ada6d81701f14dd3c4b9790afd (patch) | |
tree | afe580c002d0b63a6ff84b3e88c3917dff7b4370 | |
parent | f6c6d5cb97ce460c9510846bf14e945b2b16ead0 (diff) | |
download | dateutil-git-79d2e486a34911ada6d81701f14dd3c4b9790afd.tar.gz |
Fix TypeError in parser wrapper logic
In attempting to pass-through the string representation of an exception
we are wrapping, we made the erroneous assumption that `args[0]` would
always be a string (or something that can concatenate cleanly with a
string). This turns out not to be the case with `IllegalMonthError`,
where it is an integer, so to avoid raising an erroneous `TypeError`, we
first convert the wrapped exception to a string.
See GH issue #981.
-rw-r--r-- | changelog.d/987.bugfix.rst | 4 | ||||
-rw-r--r-- | dateutil/parser/_parser.py | 2 | ||||
-rw-r--r-- | dateutil/test/test_parser.py | 4 |
3 files changed, 9 insertions, 1 deletions
diff --git a/changelog.d/987.bugfix.rst b/changelog.d/987.bugfix.rst new file mode 100644 index 0000000..8bc3cdd --- /dev/null +++ b/changelog.d/987.bugfix.rst @@ -0,0 +1,4 @@ +Fixed a bug in the parser where non-``ValueError`` exceptions would be raised +during exception handling; this would happen, for example, if an +``IllegalMonthError`` was raised in ``dateutil`` code. Fixed by Mark Bailey. +(gh issue #981, pr #987). diff --git a/dateutil/parser/_parser.py b/dateutil/parser/_parser.py index 458aa6a..7fcfa54 100644 --- a/dateutil/parser/_parser.py +++ b/dateutil/parser/_parser.py @@ -654,7 +654,7 @@ class parser(object): try: ret = self._build_naive(res, default) except ValueError as e: - six.raise_from(ParserError(e.args[0] + ": %s", timestr), e) + six.raise_from(ParserError(str(e) + ": %s", timestr), e) if not ignoretz: ret = self._build_tzaware(ret, res, tzinfos) diff --git a/dateutil/test/test_parser.py b/dateutil/test/test_parser.py index 726156c..605705e 100644 --- a/dateutil/test/test_parser.py +++ b/dateutil/test/test_parser.py @@ -743,6 +743,10 @@ class TestOutOfBounds(object): with pytest.raises(ParserError): parse("Feb 30, 2007") + def test_illegal_month_error(self): + with pytest.raises(ParserError): + parse("0-100") + def test_day_sanity(self, fuzzy): dstr = "2014-15-25" with pytest.raises(ParserError): |