diff --git a/src/coverage.rs b/src/coverage.rs index f4cf9db..b5f7529 100644 --- a/src/coverage.rs +++ b/src/coverage.rs @@ -28,10 +28,9 @@ pub fn get_executed_lines(tracer_object: &PyObject) -> Lines { filename_line_pairs .into_iter() .map(|tuple| { - let filename = tuple.get_tuple_item(0).unwrap().to_string(); + let filename = tuple.get_tuple_item(0).to_string(); let lines = tuple .get_tuple_item(1) - .unwrap() .into_iter() .map(PyObject::get_long) .collect(); @@ -185,7 +184,7 @@ fn get_line_numbers_from_code_object( line_numbers.extend( iterator_lines .iter() - .map(|line_tuple| line_tuple.get_tuple_item(2).unwrap().get_long()) + .map(|line_tuple| line_tuple.get_tuple_item(2).get_long()) .filter(|line_number| *line_number > 0), ); diff --git a/src/python.rs b/src/python.rs index f8a35ad..6f24c38 100644 --- a/src/python.rs +++ b/src/python.rs @@ -238,8 +238,12 @@ impl PyObject { } /// Assume is a tuple, and get the item at the given index - pub fn get_tuple_item(&self, index: isize) -> Result { - unsafe { Self::new(ffi::PyTuple_GET_ITEM(self.as_ptr(), index)) } + pub fn get_tuple_item(&self, index: isize) -> PyObject { + let result = unsafe { ffi::PyTuple_GetItem(self.as_ptr(), index) }; + let pointer = unsafe { ptr::NonNull::new_unchecked(result) }; + + PyObject(pointer) + } } /// Assume is a Long, and get the value