| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| from matplotlib import _api, _c_internal_utils | ||
|
|
||
|
|
||
| class _ExceptionProxy: |
There was a problem hiding this comment.
Naming: This is not exactly a proxy. "A proxy is an interface to something else" (wikipedia). This class is not an interface.
Maybe _ExceptionInfo or _ExceptionPlaceholder would be a better name.
Also a docstring would be helpful. Maybe:
| class _ExceptionProxy: | |
| class _ExceptionInfo: | |
| """ | |
| A class to carry exception information around. | |
| This is used to store and later raise exceptions. It's an alternative to directly storing | |
| Exception instances and circumvents traceback-related issues. Caching tracebacks | |
| can keep user's objects in local namespaces alive indefinitely. This can lead to very | |
| surprising memory issues for users and will result in incorrect tracebacks. |
You might even add a classmethod from_exception(exc) for convenience.
Sorry, something went wrong.
There was a problem hiding this comment.
Sure, done.
Sorry, something went wrong.
| self._cls = cls | ||
| self._args = args | ||
|
|
||
| def exception(self): |
There was a problem hiding this comment.
| def exception(self): | |
| def to_exception(self): |
which then reads raise exc_info.to_exception().
Sorry, something went wrong.
The original solution using with_traceback didn't actually work because with_traceback doesn't return a new exception instance but rather modifies the original one in place, and the traceback will then be attached to it by the raise statement. Instead, we actually need to build a new instance, so reuse the _ExceptionProxy machinery from font_manager (slightly expanded).
| Back | FazBrowse Home | New Git URL |
The original solution using with_traceback didn't actually work because with_traceback doesn't return a new exception instance but rather modifies the original one in place, and the traceback will then be attached to it by the raise statement.
Instead, we actually need to build a new instance, so reuse the _ExceptionProxy machinery from font_manager (slightly expanded).
Redo of #28899; sorry about that...
PR summary
PR checklist