From b73a70d6ff7c20c40f05a9b019191dd21827bcc0 Mon Sep 17 00:00:00 2001 From: 0x45f <23097963+0x45f@users.noreply.github.com> Date: Thu, 7 Apr 2022 17:06:38 +0800 Subject: [PATCH] Fix eager try catch (#41438) (#41477) [Cherry-Pick]Fix eager try catch (#41438) --- paddle/fluid/pybind/eager.cc | 4 +++- paddle/fluid/pybind/eager_properties.cc | 8 ++++---- paddle/fluid/pybind/eager_py_layer.cc | 8 ++++---- paddle/fluid/pybind/exception.h | 4 ++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/paddle/fluid/pybind/eager.cc b/paddle/fluid/pybind/eager.cc index 1f72af8d79d..c600844596d 100644 --- a/paddle/fluid/pybind/eager.cc +++ b/paddle/fluid/pybind/eager.cc @@ -409,6 +409,7 @@ void AutoInitTensorByTensor(TensorObject* py_tensor_ptr, * ** name: std::string) * **/ int TensorInit(PyObject* self, PyObject* args, PyObject* kwargs) { + EAGER_TRY // set a flag to record use kwargs or not bool flag_kwargs = false; if (kwargs) flag_kwargs = true; @@ -703,7 +704,8 @@ int TensorInit(PyObject* self, PyObject* args, PyObject* kwargs) { "make sure u call the existed constructor.")); } - return 1; + return -1; + EAGER_CATCH_AND_THROW_RETURN_NEG } static void TensorDealloc(TensorObject* self) { diff --git a/paddle/fluid/pybind/eager_properties.cc b/paddle/fluid/pybind/eager_properties.cc index 4c11fcc7c98..a72ea6c4b02 100644 --- a/paddle/fluid/pybind/eager_properties.cc +++ b/paddle/fluid/pybind/eager_properties.cc @@ -69,7 +69,7 @@ int tensor_properties_set_name(TensorObject* self, PyObject* value, EAGER_TRY self->tensor.set_name(CastPyArg2AttrString(value, 0)); return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyObject* tensor_properties_get_stop_gradient(TensorObject* self, @@ -110,7 +110,7 @@ int tensor_properties_set_grad(TensorObject* self, PyObject* value, "the grad inside autograd_meta")); grad->copy_(src, self->tensor.inner_place(), true); return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } int tensor_properties_set_stop_gradient(TensorObject* self, PyObject* value, @@ -122,7 +122,7 @@ int tensor_properties_set_stop_gradient(TensorObject* self, PyObject* value, meta->SetGradNode(std::make_shared(meta)); } return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyObject* tensor_properties_get_persistable(TensorObject* self, void* closure) { @@ -138,7 +138,7 @@ int tensor_properties_set_persistable(TensorObject* self, PyObject* value, auto meta = egr::EagerUtils::autograd_meta(&self->tensor); meta->SetPersistable(CastPyArg2AttrBoolean(value, 0)); return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyObject* tensor_properties_get_shape(TensorObject* self, void* closure) { diff --git a/paddle/fluid/pybind/eager_py_layer.cc b/paddle/fluid/pybind/eager_py_layer.cc index e9ddfd80bb8..cade856b360 100644 --- a/paddle/fluid/pybind/eager_py_layer.cc +++ b/paddle/fluid/pybind/eager_py_layer.cc @@ -395,7 +395,7 @@ int tensor_properties_set_container(PyLayerObject* self, PyObject* value, Py_XDECREF(self->container); self->container = value; return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyObject* tensor_properties_get_non_differentiable(PyLayerObject* self, @@ -417,7 +417,7 @@ int tensor_properties_set_non_differentiable(PyLayerObject* self, Py_XDECREF(self->non_differentiable); self->non_differentiable = value; return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyObject* tensor_properties_get_dirty_tensors(PyLayerObject* self, @@ -439,7 +439,7 @@ int tensor_properties_set_dirty_tensors(PyLayerObject* self, PyObject* value, Py_XDECREF(self->dirty_tensors); self->dirty_tensors = value; return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } int tensor_properties_set_materialize_grads(PyLayerObject* self, @@ -447,7 +447,7 @@ int tensor_properties_set_materialize_grads(PyLayerObject* self, EAGER_TRY self->materialize_grads = CastPyArg2AttrBoolean(value, 0); return 0; - EAGER_CATCH_AND_THROW_RETURN_ZERO + EAGER_CATCH_AND_THROW_RETURN_NEG } PyMethodDef pylayer_methods[] = { diff --git a/paddle/fluid/pybind/exception.h b/paddle/fluid/pybind/exception.h index cf82f464a11..b0e0ef82103 100644 --- a/paddle/fluid/pybind/exception.h +++ b/paddle/fluid/pybind/exception.h @@ -26,11 +26,11 @@ limitations under the License. */ return nullptr; \ } -#define EAGER_CATCH_AND_THROW_RETURN_ZERO \ +#define EAGER_CATCH_AND_THROW_RETURN_NEG \ } \ catch (...) { \ ThrowExceptionToPython(std::current_exception()); \ - return 0; \ + return -1; \ } namespace paddle { -- GitLab