diff --git a/vm/src/exceptions.rs b/vm/src/exceptions.rs index a62d1616b0f..19b035d980a 100644 --- a/vm/src/exceptions.rs +++ b/vm/src/exceptions.rs @@ -1182,6 +1182,20 @@ pub(super) mod types { )?; Ok(()) } + #[pymethod(magic)] + fn reduce(exc: PyBaseExceptionRef, vm: &VirtualMachine) -> PyTupleRef { + let obj = exc.as_object().to_owned(); + let mut result: Vec = vec![ + obj.class().to_owned().into(), + vm.new_tuple((exc.get_arg(0).unwrap(),)).into(), + ]; + + if let Some(dict) = obj.dict().filter(|x| !x.is_empty()) { + result.push(dict.into()); + } + + result.into_pytuple(vm) + } } #[pyexception(name, base = "PyImportError", ctx = "module_not_found_error", impl)]