diff options
Diffstat (limited to 'Lib/xml')
-rw-r--r-- | Lib/xml/sax/__init__.py | 13 | ||||
-rw-r--r-- | Lib/xml/sax/_exceptions.py | 10 | ||||
-rw-r--r-- | Lib/xml/sax/expatreader.py | 5 |
3 files changed, 25 insertions, 3 deletions
diff --git a/Lib/xml/sax/__init__.py b/Lib/xml/sax/__init__.py index 1f1f58e..447420e 100644 --- a/Lib/xml/sax/__init__.py +++ b/Lib/xml/sax/__init__.py @@ -22,7 +22,8 @@ expatreader -- Driver that allows use of the Expat parser with SAX. from xmlreader import InputSource from handler import ContentHandler, ErrorHandler from _exceptions import SAXException, SAXNotRecognizedException, \ - SAXParseException, SAXNotSupportedException + SAXParseException, SAXNotSupportedException, \ + SAXReaderNotAvailable def parse(source, handler, errorHandler=ErrorHandler()): @@ -74,9 +75,17 @@ def make_parser(parser_list = []): try: return _create_parser(parser_name) except ImportError,e: + import sys + if sys.modules.has_key(parser_name): + # The parser module was found, but importing it + # failed unexpectedly, pass this exception through + raise + except SAXReaderNotAvailable: + # The parser module detected that it won't work properly, + # so try the next one pass - raise SAXException("No parsers found", None) + raise SAXReaderNotAvailable("No parsers found", None) # --- Internal utility methods used by make_parser diff --git a/Lib/xml/sax/_exceptions.py b/Lib/xml/sax/_exceptions.py index c02974f..1804f3f 100644 --- a/Lib/xml/sax/_exceptions.py +++ b/Lib/xml/sax/_exceptions.py @@ -104,3 +104,13 @@ class SAXNotSupportedException(SAXException): perform is requested (specifically setting a state or value). SAX applications and extensions may use this class for similar purposes.""" + +# ===== SAXNOTSUPPORTEDEXCEPTION ===== + +class SAXReaderNotAvailable(SAXNotSupportedException): + """Exception class for a missing driver. + + An XMLReader module (driver) should raise this exception when it + is first imported, e.g. when a support module cannot be imported. + It also may be raised during parsing, e.g. if executing an external + program is not permitted.""" diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py index 2fc2b7c..eb46bcd 100644 --- a/Lib/xml/sax/expatreader.py +++ b/Lib/xml/sax/expatreader.py @@ -6,7 +6,10 @@ pyexpat.__version__ == '2.22'. version = "0.20" from xml.sax._exceptions import * -from xml.parsers import expat +try: + from xml.parsers import expat +except ImportError: + raise SAXReaderNotAvailable("expat not supported",None) from xml.sax import xmlreader, saxutils, handler AttributesImpl = xmlreader.AttributesImpl |