diff --git a/islpy/__init__.py b/islpy/__init__.py
index d89a6e1eacb24f06ea5bac4896fb3eafc91015b1..16832219979bb8ab32a31eacc182b8ad22bffc17 100644
--- a/islpy/__init__.py
+++ b/islpy/__init__.py
@@ -183,6 +183,11 @@ def _add_functionality():
             if context is None:
                 context = DEFAULT_CONTEXT
 
+            # Turns out __del__ is called even if the constructor fails with an
+            # exception.  This is creates a semi-valid state that's just good
+            # enough to get us past the __del__ method.
+            self.data = None
+
             new_me = self.read_from_str(context, s)
             self._setup(new_me._release())