From c4e275362fb19f978fccfae447181dd9cbc176df Mon Sep 17 00:00:00 2001 From: Eoin Shaughnessy Date: Fri, 17 Apr 2026 02:11:12 +0100 Subject: [PATCH 1/2] gh-148663: Document that IllegalMonthError inherits from both ValueError and IndexError --- Doc/library/calendar.rst | 10 +++++++++- Lib/test/test_calendar.py | 5 +++++ .../2026-04-17-02-28-55.gh-issue-148663.MHIbRB.rst | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Documentation/2026-04-17-02-28-55.gh-issue-148663.MHIbRB.rst diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst index 54cafaf4fe47d8..0b9ff2982f0a02 100644 --- a/Doc/library/calendar.rst +++ b/Doc/library/calendar.rst @@ -580,8 +580,16 @@ The :mod:`!calendar` module defines the following exceptions: .. exception:: IllegalMonthError(month) - A subclass of :exc:`ValueError`, + A subclass of both :exc:`ValueError` and :exc:`IndexError`, raised when the given month number is outside of the range 1-12 (inclusive). + The :exc:`IndexError` base class is preserved for backwards compatibility + with code that caught :exc:`IndexError` for bad month numbers prior to + Python 3.13. + + .. versionchanged:: 3.12 + :exc:`IllegalMonthError` is now also a subclass of + :exc:`ValueError`. Newer code should avoid catching + :exc:`IndexError`. .. attribute:: month diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py index fe9a59d335b6b0..0e98ef97b240a6 100644 --- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -495,12 +495,17 @@ def test_formatmonth(self): calendar.TextCalendar().formatmonth(0, 2), result_0_02_text ) + def test_formatmonth_with_invalid_month(self): with self.assertRaises(calendar.IllegalMonthError): calendar.TextCalendar().formatmonth(2017, 13) with self.assertRaises(calendar.IllegalMonthError): calendar.TextCalendar().formatmonth(2017, -1) + def test_illegal_month_error_bases(self): + self.assertIsSubclass(calendar.IllegalMonthError, ValueError) + self.assertIsSubclass(calendar.IllegalMonthError, IndexError) + def test_formatmonthname_with_year(self): self.assertEqual( calendar.HTMLCalendar().formatmonthname(2004, 1, withyear=True), diff --git a/Misc/NEWS.d/next/Documentation/2026-04-17-02-28-55.gh-issue-148663.MHIbRB.rst b/Misc/NEWS.d/next/Documentation/2026-04-17-02-28-55.gh-issue-148663.MHIbRB.rst new file mode 100644 index 00000000000000..0fbe5a699ef0ad --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2026-04-17-02-28-55.gh-issue-148663.MHIbRB.rst @@ -0,0 +1,2 @@ +Document that :class:`calendar.IllegalMonthError` is a subclass of both +:exc:`ValueError` and :exc:`IndexError` since Python 3.12. From bd3bfd1042b796d0099c8c9c309fd03082f5efef Mon Sep 17 00:00:00 2001 From: Eoin Shaughnessy <45000144+EoinTrial@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:48:09 +0100 Subject: [PATCH 2/2] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- Doc/library/calendar.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst index 0b9ff2982f0a02..d17a736e73c584 100644 --- a/Doc/library/calendar.rst +++ b/Doc/library/calendar.rst @@ -580,11 +580,8 @@ The :mod:`!calendar` module defines the following exceptions: .. exception:: IllegalMonthError(month) - A subclass of both :exc:`ValueError` and :exc:`IndexError`, + A subclass of :exc:`ValueError` and :exc:`IndexError`, raised when the given month number is outside of the range 1-12 (inclusive). - The :exc:`IndexError` base class is preserved for backwards compatibility - with code that caught :exc:`IndexError` for bad month numbers prior to - Python 3.13. .. versionchanged:: 3.12 :exc:`IllegalMonthError` is now also a subclass of