This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author aa1371
Recipients aa1371
Date 2021-04-24.10:39:42
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
I'll sometimes find myself accidentally doing something like this (especially after a long break from using the threading module): 
stop_thread = threading.Event()
while not stop_thread:  # bug - bool(stop_thread) will always evaluate to True

Since the intention behind bool(event) is ambiguous and most likely often used improperly, I think that it would be a good idea to protect against this easy to produce bug, by overriding __bool__ to raise. There is precedent for this behavior in the popular numpy library, see here:

Expanding on my thoughts:
1) Most operations on a threading.Event are associated with checking the truthiness of the underlying state of the Event. Meaning that there are many opportunities for bool(event) to be called improperly.
2) I can't think of any cases where  you would want to evaluate truthiness on anything other than the underlying "set" state of the Event. The one exception I can think of being the following (however, I believe this is generally accepted to be an anti-pattern, which I don't think should be considered a redeeming case for allowing bool(event)):
def my_func(event=None):
    event = event or threading.Event()
3) It is an easy addition to protect against this. Simply by raising in __bool__
4) The only backwards incompatibilities this could create are in cases where the event is being evaluated for truthiness incorrectly, and in the anti-pattern case described in point 2.
Date User Action Args
2021-04-24 10:39:43aa1371setrecipients: + aa1371
2021-04-24 10:39:43aa1371setmessageid: <>
2021-04-24 10:39:42aa1371linkissue43929 messages
2021-04-24 10:39:42aa1371create