diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h index 2de3f5f1..a1cf6bef 100644 --- a/include/pybind11/pytypes.h +++ b/include/pybind11/pytypes.h @@ -1414,14 +1414,19 @@ public: T* get_pointer() const { auto name = this->name(); T *result = static_cast(PyCapsule_GetPointer(m_ptr, name)); - if (!result) pybind11_fail("Unable to extract capsule contents!"); + if (!result) { + PyErr_Clear(); + pybind11_fail("Unable to extract capsule contents!"); + } return result; } /// Replaces a capsule's pointer *without* calling the destructor on the existing one. void set_pointer(const void *value) { - if (PyCapsule_SetPointer(m_ptr, const_cast(value)) != 0) + if (PyCapsule_SetPointer(m_ptr, const_cast(value)) != 0) { + PyErr_Clear(); pybind11_fail("Could not set capsule pointer"); + } } const char *name() const { return PyCapsule_GetName(m_ptr); }