Issue #24125: Saved error's line and column numbers when an error is occured
during closing expatreader.  Fixed a regression introduced in issue #23865.
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index cd243e6..21c9db9 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -43,6 +43,9 @@
     _mkproxy = weakref.proxy
     del weakref, _weakref
 
+class _ClosedParser:
+    pass
+
 # --- ExpatLocator
 
 class ExpatLocator(xmlreader.Locator):
@@ -214,16 +217,24 @@
             self._err_handler.fatalError(exc)
 
     def close(self):
-        if self._entity_stack or self._parser is None:
+        if (self._entity_stack or self._parser is None or
+            isinstance(self._parser, _ClosedParser)):
             # If we are completing an external entity, do nothing here
             return
         try:
             self.feed("", isFinal = 1)
             self._cont_handler.endDocument()
-        finally:
             self._parsing = 0
             # break cycle created by expat handlers pointing to our methods
             self._parser = None
+        finally:
+            self._parsing = 0
+            if self._parser is not None:
+                # Keep ErrorColumnNumber and ErrorLineNumber after closing.
+                parser = _ClosedParser()
+                parser.ErrorColumnNumber = self._parser.ErrorColumnNumber
+                parser.ErrorLineNumber = self._parser.ErrorLineNumber
+                self._parser = parser
 
     def _reset_cont_handler(self):
         self._parser.ProcessingInstructionHandler = \