New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
calendar.nextmonth and calendar.prevmonth functions doesn't check if the month is valid #79587
Comments
import calendar
calendar.nextmonth(2018, 11) returns (2018, 12) which is OK.
calendar.nextmonth(2018, 12) returns (2019, 1) which is also OK.
calendar.nextmonth(2018, 13) returns (2018, 14). It would make more sense if this was raise calendar.IllegalMonthError. |
prevmonth() and nextmonth() are internal functions. They are used only in itermonthdays3(), and the month is already checked before calling them. |
I understand you but i still think these functions need to check it. As an end-user, I shouldn't see these functions to work with no errors for illegal months. |
What is the problem with current code? Can you provide an example that doesn't work correctly? |
I'm suggesting this idea to consistency. Why an IllegalMonthError exists in calendar module if we don't raise this error when required? What would you say if I asked you to "What is the month number coming after 156th month?" Would you say 157 or prefer to inform me that I'm doing something wrong? >>> import calendar
>>> calendar.nextmonth(2018, 12)
(2019, 1) If Python is smart enough to jump next year's first month and not say (2018, 13) blindly, it should also check if the given month is valid. But:
>>> calendar.nextmonth(2018, 157)
(2018, 158) I think this is clearly a bug in the code. --------------------------------------------------- I'll wander away from the this issue but some of the functions in calendar module also not consistent with each other:
Why? Wouldn't it be more reasonable if the last one also had raised IllegalMonthError?
|
nextmonth() is not a public API. You should not use it. If you want to make IllegalMonthError be always raised instead of IndexError for out of range month values, this is a different issue. |
I agree with Serhiy, nextmonth() is not a public API,you should not use it. |
OK now it isn't a problem if we shouldn't use this function directly but how am i going to understand if a function is public API or not? In classes, we are using single or double underscore to indicate that the function or variable we're declaring is intended to be private. Is there anything similar to this for "public API functions" or am I in the wrong way? |
Yes - read the reference manual. If the function is not there it is not public. |
Might it be worth moving Due to Hyrum's Law, people will be using them anyway, but it could have a short deprecation period where |
They are not in the __all__ list and are not documented. If __all__ is defined for the module, there is no need to use the underscore prefix for private globals. The calendar module is not special, many other modules follow this convention. |
OK, thank you all for information. It's now clear for me too why this is not an issue. I'll try to close this issue by selecting status as close but if it isn't working with this way (I'm new, I don't know how) anyone can close this. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: