Repository navigation
Re-fix exception caching in dviread. - #28906
Merged
Merged
Conversation
timhoffm
reviewed
Sep 30, 2024
| from matplotlib import _api, _c_internal_utils | ||
|
|
||
|
|
||
| class _ExceptionProxy: |
Member
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:
Suggested change
| 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.
| self._cls = cls | ||
| self._args = args | ||
|
|
||
| def exception(self): |
Member
There was a problem hiding this comment.
Suggested change
| def exception(self): | |
| def to_exception(self): |
which then reads raise exc_info.to_exception().
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).
ksunden
approved these changes
Oct 2, 2024
QuLogic
approved these changes
Oct 2, 2024
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.
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