Use BaseException in raise_()#515
Merged
jmadler merged 1 commit intoPythonCharmers:masterPythonCharmers/python-future:masterfrom Oct 24, 2019
jparise:raise-base-exceptionjparise/python-future:raise-base-exceptionCopy head branch name to clipboard
Merged
Use BaseException in raise_()#515jmadler merged 1 commit intoPythonCharmers:masterPythonCharmers/python-future:masterfrom jparise:raise-base-exceptionjparise/python-future:raise-base-exceptionCopy head branch name to clipboard
jmadler merged 1 commit intoPythonCharmers:masterPythonCharmers/python-future:masterfrom
jparise:raise-base-exceptionjparise/python-future:raise-base-exceptionCopy head branch name to clipboard
Conversation
In both Python 2 and 3, the Exception type is derived from BaseException: The base class for all built-in exceptions. It is not meant to be directly inherited by user-defined classes (for that, use Exception). In practice, some libraries provide exception types that do derive directly from BaseException (such as `gevent.Timeout`), and this code should recognize them as valid exception types. As further evidence, Python 2 explicitly states that raised types must be derived from BaseException: exceptions must be old-style classes or derived from BaseException Python 3 is more flexible here, which is why we provide a TypeError case for non-BaseException-derived types. While I'm here, I made that message a little more helpful by including the name of the incompatible type.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In both Python 2 and 3, the Exception type is derived from
BaseException:
In practice, some libraries provide exception types that do derive
directly from BaseException (such as
gevent.Timeout), and this codeshould recognize them as valid exception types.
As further evidence, Python 2 explicitly states that raised types must
be derived from BaseException:
Python 3 is more flexible here, which is why we provide a TypeError case
for non-BaseException-derived types. While I'm here, I made that message
a little more helpful by including the name of the incompatible type.
See also #512