From: "jsc (Justin Collins)" <redmine@...> Date: 2013-11-25T09:13:09+09:00 Subject: [ruby-core:58556] [ruby-trunk - Feature #9145] Queue#pop(true) return nil if empty instead of raising ThreadError Issue #9145 has been updated by jsc (Justin Collins). Glass_saga (Masaki Matsushita) wrote: > I think we can't change default behavior of Queue#pop(true) because some code expects ThreadError to be raised. > However, it may be possible to introduce new keyword argument like following: > > q = Queue.new > while next_item = q.pop(true, exception: false) # it doesn't raise ThreadError and returns nil. > # do something > end That would work for me. ---------------------------------------- Feature #9145: Queue#pop(true) return nil if empty instead of raising ThreadError https://bugs.ruby-lang.org/issues/9145#change-43134 Author: jsc (Justin Collins) Status: Feedback Priority: Normal Assignee: Category: ext Target version: I propose the non-blocking form of Queue#pop behave like Array#pop and return nil when empty. Current behavior is to raise a ThreadError, with a message indicating the queue is empty. For example: q = Queue.new begin loop do next_item = q.pop(true) end rescue ThreadError # queue is empty...or maybe something bad happened end Instead, this could be q = Queue.new while next_item = q.pop(true) end Alternatively, raise an exception that is a subclass of ThreadError with a more specific name, such as "QueueEmpty". This would be a small improvement while remaining compatible with existing code. -- http://bugs.ruby-lang.org/