Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
gh-109798: Normalize_datetime
anddatetime
error messages#127345
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Most changes to Pythonrequire a NEWS entry. Add one using theblurb_it web app or theblurb command-line tool. If this change has little impact on Python users, wait for a maintainer to apply the |
datetime
datetime
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
BTW, please do not force-push; it makes reviewing harder. Moreover, all commits are squashed upon merge anyway, so there's no need for the PR/branch to be cluttered with amendment commits. See alsothe devguide. |
@erlend-aasland sorry, i got it. |
datetime
_datetime
anddatetime
error messagesUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
Misc/NEWS.d/next/Library/2024-11-27-23-29-05.gh-issue-109798.OPj1CT.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Some nitpicks, and two notes:
- I'm happy with doing this, but we do need to be aware that this is a slight breaking change for anybody relying on the exception messages. They shouldn't be doing that, but we need to be aware of it anyway.
- It's fine right now, but
PyErr_Format
with%R
can have unintended side effects if the__repr__
of the passed object is evil. Again, not a problem here as far as I can tell, but it's definitely worth noting.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Misc/NEWS.d/next/Library/2024-11-27-23-29-05.gh-issue-109798.OPj1CT.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Now, how far fetched is it to ask for someassertRaisesRegex
tests 😄
@ZeroIntensity i added tests ✅ , |
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Getting close to ready :)
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Lib/_pydatetime.py Outdated
assert 1 <= month <= 12,f"month must be in 1..12, but got {month}" | ||
return _DAYS_BEFORE_MONTH[month] + (month > 2 and _is_leap(year)) | ||
def _ymd2ord(year, month, day): | ||
"year, month, day -> ordinal, considering 01-Jan-0001 as day 1." | ||
assert 1 <= month <= 12,'month must be in 1..12' | ||
assert 1 <= month <= 12,f"month must be in 1..12, but got {month}" | ||
dim = _days_in_month(year, month) | ||
assert 1 <= day <= dim,('day must be in 1..%d' % dim) | ||
assert 1 <= day <= dim,f"day must be in 1..{dim}, but got {day}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think it's worth changing these toif
s andValueError
s; assertions are disabled when Python is ran with-O
. (Though, it's theoretically possible that will break code for people relying onAssertionError
. I'm not sure how big of an issue that is.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
the practice of calling assert is also found in other modules and I think this issue should be raised separately (not in this PR)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think it's fine to do it in this PR, because IMO, unifying the error types fall under the category of "normalizing." I'm not super crazy about it though--any opinion@erlend-aasland?
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
donBarbos commentedDec 20, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@erlend-aasland could you merge it? (if you have time :-) |
FYI, most of the core devs are done for the holidays. You'll have to wait until after the new year probably. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I strongly suspect that this is going to break people who are testing against exact error messages, but that's really not part of our public API, so that is fine.
@@ -2419,7 +2422,7 @@ def __new__(cls, offset, name=_Omitted): | |||
if not cls._minoffset <= offset <= cls._maxoffset: | |||
raise ValueError("offset must be a timedelta " | |||
"strictly between -timedelta(hours=24) and " | |||
"timedelta(hours=24).") | |||
f"timedelta(hours=24), not {offset!r}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Probably not going to be a great user experience here because of how bad thetimedelta
formatter is:
>>>print(f"{timedelta(hours=-25)!r}")datetime.timedelta(days=-2,seconds=82800)
Maybe it will be clearer if we do it this way:
ifoffset<timedelta(0):offset_str=f"-{-offset)}"else:offset_str=str(offset)
That will print stuff like-1 day, 1:00:00
instead oftimedelta(days=-2, seconds=82800)
. Though looking at it, I realize that the way it gets printed is misleading, since that's the output you get fromprint(timedelta(hours=-23))
and users have no way of knowing what is going on under the hood there.
Probably a more elaborate timedelta formatter would be better, since we basically always want this inHH:MM:SS.fff
format, since that reflects what we care about best and also is unambigous, but we don't have a particularly easy way to do that. I guess we can revisit this when/if#85426 is implemented.
donBarbosFeb 11, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@pganssle CI successfully passed 👍 |
3e222e3
intopython:mainUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
I only updated the messages, I fixed everything I found.
From these errors:
i made this one error:
and I made the same message template for the fields
year
,month
,day
,hour
,minute
,second
,microsecond
andfold
because I decided that it was worth leaving the field that was received in the output and at the same time using one string instead of tuple.with the rest of the error messages it's easier, I just reduced them to one type