bpo-17576: Strict __int__ and __index__ return types; operator.index always uses __index__#13740
bpo-17576: Strict __int__ and __index__ return types; operator.index always uses __index__#13740mdickinson wants to merge 2 commits intopython:masterfrom
Conversation
|
This PR should also allow simplifications to many parts of the codebase that currently need to check what type they got back from a |
| self.assertRaises(TypeError, getargs_n, 3.14) | ||
| self.assertEqual(99, getargs_n(Index())) | ||
| self.assertEqual(0, getargs_n(IndexIntSubclass())) | ||
| self.assertEqual(getargs_n(IndexIntSubclass()), 99) |
There was a problem hiding this comment.
Nitpick: inconsistent arg ordering. Will fix.
| operator_index = operator.index(my_int) | ||
| self.assertEqual(direct_index, 8) | ||
| self.assertEqual(operator_index, 7) | ||
| self.assertEqual(operator_index, 8) |
There was a problem hiding this comment.
This is the key change: for a subclass of int, we take the __index__ result to be the true value instead of the integer's value.
| return item; | ||
| } | ||
|
|
||
| /* In general, use __index__ */ |
There was a problem hiding this comment.
Nitpick: redundant comment. I'll remove it.
|
The test failure appears to be due to |
|
Some of these warnings were added in 3.8. We cannot turn them into TypeError in the same version. |
Could you please try rebasing on master to see if it helps. One of the assertion errors in test_asyncio was fixed with #13754 . |
Are you sure? Which ones? The PR removes 3 |
|
The warning added in bpo-36048. |
Ah yes, right. Good point. Closing. |
This PR:
DeprecationWarnings introduced by @serhiy-storchaka in Python 3.4 for non-integer return values from__int__and__index__intoTypeErrorsoperator.indexandPyNumber_Indexalways give the same return value as__index__. This fixes the inconsistency reported by @warsaw in bpo-17576.Still working on doc updates and what's-new entries, but making the PR now so that others can review.
https://bugs.python.org/issue17576