GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||
GeezerVison is showing github.com — gh-105144: abc: Suppress errors raised by unrelated other subclasses by JelleZijlstra · Pull Request #105159 · python/cpython Conversation
|
| if issubclass(subclass, rcls): | ||
| cls._abc_cache.add(subclass) | ||
| return True | ||
| except Exception: |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
In the C code I actually suppress all exceptions, not just Exception. Not sure what the right thing to do is.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I'd say suppressing all exceptions would definitely be bad -- that would mean that we'd be suppressing e.g. KeyboardInterrupt, and SystemExit.
Honestly, I feel pretty uncomfortable about suppressing all subclasses of Exception -- could we just do TypeError? If I had a typo in a custom __subclasscheck__ method, I'm not sure I'd want e.g. the resulting AttributeError to be silenced because of the fact that ABCMeta was being used somewhere
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
You'd still see the error if you use your broken class directly. What this PR changes is that you'll no longer see the error if you use issubclass() checks on a separate class that inherits from the same ABC.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Looks like there's still lots of diff --git a/Lib/typing.py b/Lib/typing.py index 8c874797d2..8caeb915d8 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1733,7 +1733,7 @@ def _allow_reckless_class_checks(depth=3): The abc and functools modules indiscriminately call isinstance() and issubclass() on the whole MRO of a user class, which may contain protocols. """ - return _caller(depth) in {'abc', 'functools', None} + return _caller(depth) in {'functools', None} |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
The trouble is that these Lines 105 to 106 in ec0082c
But we don't want it to raise if the |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Ultimately, it does sort of feel like |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I feel like this change isn't worth the churn. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.