diff --git a/vm/src/protocol/iter.rs b/vm/src/protocol/iter.rs index 1875d7fa2f..30b97a7b1f 100644 --- a/vm/src/protocol/iter.rs +++ b/vm/src/protocol/iter.rs @@ -234,11 +234,14 @@ where type Item = PyResult; fn next(&mut self) -> Option { - let obj = PyIter::new(self.obj.borrow()) - .next(self.vm) - .map(|iret| iret.into_result().ok()) - .transpose()?; - Some(obj.and_then(|obj| T::try_from_object(self.vm, obj))) + let imp = |next: PyResult| -> PyResult> { + let Some(obj) = next?.into_result().ok() else { + return Ok(None); + }; + Ok(Some(T::try_from_object(self.vm, obj)?)) + }; + let next = PyIter::new(self.obj.borrow()).next(self.vm); + imp(next).transpose() } #[inline]