-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
Open
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)release-blockertype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Throwing an exception during an implicit cast to a boolean as part of a logical operation (or
, and
) bypasses surrounding try/except statements.
The following example works on Python 3.12.3 but fails on Python 3.14.0rc1:
Example:
class Foo:
def __bool__(self):
raise NotImplementedError()
a = Foo()
b = Foo()
# Works
try:
c = bool(a)
except:
print("passed c = bool(a)")
# Fails
try:
c = a or b
except:
print("passed c = a or b")
Output on Python 3.12.3 (expected behavior):
passed c = bool(a)
passed c = a or b
Output on Python 3.14.0rc1:
passed c = bool(a)
Traceback (most recent call last):
File "/Users/justinfu/code/test_bool.py", line 15, in <module>
c = a or b
^^^^^^
File "/Users/justinfu/code/test_bool.py", line 3, in __bool__
raise NotImplementedError()
NotImplementedError
CPython versions tested on:
3.14
Operating systems tested on:
macOS
Linked PRs
Metadata
Metadata
Assignees
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)release-blockertype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
Todo