else realname = name;
     }
 
-    *pyclass << tab4 << "def __del__(self," << module << "=" << module << "):\n";
+    char* dfname = name_destroy(realname);
+
+    *pyclass << tab4 << "def __del__(self, " << "delfunc=" << module<< "." << dfname << "):\n";
     emitAddPragmas(*pyclass,"__del__",tab8);
-    *pyclass << tab8 << "if self.thisown == 1 :\n"
-            << tab8 << tab4 << module << "." << name_destroy(realname) << "(self)\n";
+    *pyclass << tab8 << "if self.thisown == 1:\n"
+             << tab8 << tab4 << "try:\n"
+            << tab8 << tab8 << "delfunc(self)\n"
+             << tab8 << tab4 << "except:\n"
+            << tab8 << tab8 << "pass\n";
 
     have_destructor = 1;
     if (doc_entry) {