Issue #18200: Back out usage of ModuleNotFoundError (8d28d44f3a9a)
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index 8619747..a227cda 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -20,7 +20,7 @@
 
 try:
     from xml.parsers import expat
-except ModuleNotFoundError:
+except ImportError:
     raise SAXReaderNotAvailable("expat not supported", None)
 else:
     if not hasattr(expat, "ParserCreate"):
@@ -30,7 +30,18 @@
 AttributesImpl = xmlreader.AttributesImpl
 AttributesNSImpl = xmlreader.AttributesNSImpl
 
-import weakref
+# If we're using a sufficiently recent version of Python, we can use
+# weak references to avoid cycles between the parser and content
+# handler, otherwise we'll just have to pretend.
+try:
+    import _weakref
+except ImportError:
+    def _mkproxy(o):
+        return o
+else:
+    import weakref
+    _mkproxy = weakref.proxy
+    del weakref, _weakref
 
 # --- ExpatLocator
 
@@ -41,7 +52,7 @@
     a circular reference between the parser and the content handler.
     """
     def __init__(self, parser):
-        self._ref = weakref.proxy(parser)
+        self._ref = _mkproxy(parser)
 
     def getColumnNumber(self):
         parser = self._ref