-
-
Notifications
You must be signed in to change notification settings - Fork 32k
bpo-32582: chr() doesn't raise OverflowError anymore #5218
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
Conversation
chr() now catchs OverflowError and raises a ValueError exception instead.
Python/bltinmodule.c
Outdated
return NULL; | ||
} | ||
PyErr_Clear(); | ||
ch = -1; |
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.
We don't need this line, right?
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.
Oops, right. I removed this useless assignment.
My intent was to get a different error message for underflow (< 0) or overflow (> 0). But in fact, the same error message for all cases is just fine.
Hum, this PR changes the exception type for large float. Patched:
Python 3.6:
|
Ahh, yes. And now it could accept small float while not the case before. So still need to call "PyArg_Parse" and catch OverflowError then. |
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.
Needed updating the chr() documentation an an entry in the What's New document, in the section "Porting to 3.7".
@@ -304,7 +304,8 @@ def test_chr(self): | |||
self.assertEqual(chr(0x0010FFFF), "\U0010FFFF") | |||
self.assertRaises(ValueError, chr, -1) | |||
self.assertRaises(ValueError, chr, 0x00110000) | |||
self.assertRaises((OverflowError, ValueError), chr, 2**32) | |||
self.assertRaises(ValueError, chr, -2**100) |
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.
Use 2**1000
. It is possible that once Python will run platform with 128-bit C long.
{ | ||
return PyUnicode_FromOrdinal(i); | ||
int ch = _PyLong_AsInt(i); |
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.
It is better to use PyLongAsLongAndOverflow()
.
@@ -0,0 +1,2 @@ | |||
The :func:`chr` builtin function now catchs :exc:`OverflowError` and raises |
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.
"catches" -- this is an implementation detail. And I think it is better to not raise and catch it.
chr() now catchs OverflowError and raises a ValueError exception
instead.
https://bugs.python.org/issue32582