You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Following to changes in bpo-45711, the interpreter's internal representation of the active exception is just the exception instance (the exc_type and exc_traceback fields were removed).
For backwards compatibility, sys.exc_info() constructs the (typ, val, tb) tuple from the instance and this will continue to be the case for some time because this tuple has leaked into quite a few APIs.
However, now that the redundancy in the exc_info tuple is guaranteed by the way it's constructed, we can confidently add a sys.exception() method that returns just the exception instance (as suggested in PEP-3134's section on future improvements).
This small change will make a difference to learners because the (typ, val, tb) tuple looks quite cryptic to those who don't know about tracebacks, and the redundancy in it is confusing for those who do.
Would there be any value in spelling this as sys.active_exception() or sys.current_exception() or sys.get_exception() or sys.exception_in_flight() or similar?
My only worry is confusion between sys.exception() versus builtins.Exception.
So sys.exception() will be equivalent to sys.exc_info()[1] (or rather, sys.exc_info() will be (type(sys.exception()), sys.exception(), sys.exception().__traceback__))?
FWIW, here's an alternative we should not pursue: return just the exception from sys.exc_info(). For compatibility, we would implement __iter__ and __getitem__ on BaseException, to duplicate the behavior of the current tuple. There are a number of good reasons why this is not what we should do.
sys.exception() seems like a decent enough trade-off. I've always disliked the abbreviations in "exc_info". It doesn't feel big enough for a PEP to me.
Activity
iritkatriel commentedon Jan 10, 2022
Following to changes in bpo-45711, the interpreter's internal representation of the active exception is just the exception instance (the exc_type and exc_traceback fields were removed).
For backwards compatibility, sys.exc_info() constructs the (typ, val, tb) tuple from the instance and this will continue to be the case for some time because this tuple has leaked into quite a few APIs.
However, now that the redundancy in the exc_info tuple is guaranteed by the way it's constructed, we can confidently add a sys.exception() method that returns just the exception instance (as suggested in PEP-3134's section on future improvements).
This small change will make a difference to learners because the (typ, val, tb) tuple looks quite cryptic to those who don't know about tracebacks, and the redundancy in it is confusing for those who do.
iritkatriel commentedon Jan 10, 2022
This is part of a larger plan to reduce the footprint of the exc_info triplet on the language. See https://gist.github.com/iritkatriel/3927147548b10a7929cb0b680e3adc52
History
sweeneyde commentedon Jan 10, 2022
Would there be any value in spelling this as sys.active_exception() or sys.current_exception() or sys.get_exception() or sys.exception_in_flight() or similar?
My only worry is confusion between sys.exception() versus builtins.Exception.
ericsnowcurrently commentedon Jan 10, 2022
So sys.exception() will be equivalent to sys.exc_info()[1] (or rather, sys.exc_info() will be (type(sys.exception()), sys.exception(), sys.exception().__traceback__))?
That seems good to me.
ericsnowcurrently commentedon Jan 10, 2022
FWIW, here's an alternative we should not pursue: return just the exception from sys.exc_info(). For compatibility, we would implement
__iter__and__getitem__on BaseException, to duplicate the behavior of the current tuple. There are a number of good reasons why this is not what we should do.iritkatriel commentedon Jan 10, 2022
I thought of something like sys.active_exception() but it seems like a lot to type. sys.exception() was suggested in PEP-3134.
Does this change need a pep?
warsaw commentedon Jan 10, 2022
sys.exception() seems like a decent enough trade-off. I've always disliked the abbreviations in "exc_info". It doesn't feel big enough for a PEP to me.
iritkatriel commentedon Jan 10, 2022
Cool. I just removed the do-not-merge label from the PR and I guess it's ready to be reviewed.
iritkatriel commentedon Jan 13, 2022
New changeset c590b58 by Irit Katriel in branch 'main':
bpo-46328: Add sys.exception() (GH-30514)
c590b58