Closed
Description
Bug report
Bug description:
In the calendar module, IllegalMonthError
is not handled properly. For months greater than 12, an IndexError is raised instead.
formatmonthname
do not raise IndexError for negative integer because list support negative integer indexing.
>>> import calendar >>> calendar.month(2024, -1) Traceback (most recent call last): File "<python-input-12>", line 1, in <module> calendar.month(2024, -1) ~~~~~~~~~~~~~~^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 395, in formatmonth for week in self.monthdays2calendar(theyear, themonth): ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 284, in monthdays2calendar days = list(self.itermonthdays2(year, month)) File "/Users/gugu/Code/cpython/Lib/calendar.py", line 240, in itermonthdays2 for i, d in enumerate(self.itermonthdays(year, month), self.firstweekday): ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 228, in itermonthdays day1, ndays = monthrange(year, month) ~~~~~~~~~~^^^^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 165, in monthrange raise IllegalMonthError(month) calendar.IllegalMonthError: bad month number -1; must be 1-12 >>> calendar.month(2024, 13) Traceback (most recent call last): File "<python-input-13>", line 1, in <module> calendar.month(2024, 13) ~~~~~~~~~~~~~~^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 390, in formatmonth s = self.formatmonthname(theyear, themonth, 7 * (w + 1) - 1) File "/Users/gugu/Code/cpython/Lib/calendar.py", line 373, in formatmonthname s = month_name[themonth] ~~~~~~~~~~^^^^^^^^^^ File "/Users/gugu/Code/cpython/Lib/calendar.py", line 103, in __getitem__ funcs = self._months[i] ~~~~~~~~~~~~^^^ IndexError: list index out of range
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
Linked PRs
- gh-126476: Raise
IllegalMonthError
for calendar.formatmonth method when the input month is not corret #126484 - [3.12] gh-126476: Raise IllegalMonthError for calendar.formatmonth() when the input month is not correct (GH-126484) #126878
- [3.13] gh-126476: Raise IllegalMonthError for calendar.formatmonth() when the input month is not correct (GH-126484) #126879