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.

classification
Title: Boolean representation of Q/queue objects does not fit behaviour of lists etc.
Type: behavior Stage:
Components: Versions: Python 3.4, Python 2.7
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: rhettinger Nosy List: Frunit, r.david.murray, rhettinger
Priority: normal Keywords:

Created on 2015-08-14 10:06 by Frunit, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (3)
msg248577 - (view) Author: (Frunit) Date: 2015-08-14 10:06
Usually, list-like objects return False when they are empty and True when at least one element is in the list. However, Queue (Python 2) resp. queue (Python 3) objects always return True. I am aware of that objects should always return True unless otherwise stated, but as queues are (at least in my perception) related to lists, they should behave similarly in this case.

Python3 (similar in Python2):
>>> import queue
>>> q = queue.Queue()
>>> bool(q)
True
(Should be False, in my opinion; the same for PriorityQueue and LifoQueue)

I searched for reasons for returning True in empty Queues, but I could not find any in the net or in the Python docs.
msg248585 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2015-08-14 13:00
I believe this is intentional; see the documentation of the "empty' method for the motivation.  The reason for not just reflecting the result of an empty call in __bool__ is that not doing so forces you to use empty, which gives you an opportunity to learn about the lack of guarantees.  And every time you use it, or read it in someone else's code, you are reminded that a Queue is *different* from a list in this very important way.
msg248634 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2015-08-15 04:06
RDM is correct.  Queues having qsize() instead of __len__() was an intentional part of the design.  Code relying on the boolean value would be fragile.   

FWIW, this code is very old (originally designed by Guido when dinosaurs roamed the earth) and it is far too late to alter its API.
History
Date User Action Args
2022-04-11 14:58:19adminsetgithub: 69054
2015-08-15 04:06:58rhettingersetstatus: open -> closed
resolution: rejected
messages: + msg248634
2015-08-14 19:53:49rhettingersetassignee: rhettinger

nosy: + rhettinger
2015-08-14 13:00:21r.david.murraysetnosy: + r.david.murray
messages: + msg248585
2015-08-14 10:06:01Frunitcreate