summaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Lib/xml/sax/_exceptions.py
blob: c972f1f706ec5e2c029129b39ce27503cfee0e76 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
"""Different kinds of SAX Exceptions""" 
import sys 
if sys.platform[:4] == "java": 
    from java.lang import Exception 
del sys 
 
# ===== SAXEXCEPTION ===== 
 
class SAXException(Exception): 
    """Encapsulate an XML error or warning. This class can contain 
    basic error or warning information from either the XML parser or 
    the application: you can subclass it to provide additional 
    functionality, or to add localization. Note that although you will 
    receive a SAXException as the argument to the handlers in the 
    ErrorHandler interface, you are not actually required to raise 
    the exception; instead, you can simply read the information in 
    it.""" 
 
    def __init__(self, msg, exception=None): 
        """Creates an exception. The message is required, but the exception 
        is optional.""" 
        self._msg = msg 
        self._exception = exception 
        Exception.__init__(self, msg) 
 
    def getMessage(self): 
        "Return a message for this exception." 
        return self._msg 
 
    def getException(self): 
        "Return the embedded exception, or None if there was none." 
        return self._exception 
 
    def __str__(self): 
        "Create a string representation of the exception." 
        return self._msg 
 
    def __getitem__(self, ix): 
        """Avoids weird error messages if someone does exception[ix] by 
        mistake, since Exception has __getitem__ defined.""" 
        raise AttributeError("__getitem__") 
 
 
# ===== SAXPARSEEXCEPTION ===== 
 
class SAXParseException(SAXException): 
    """Encapsulate an XML parse error or warning. 
 
    This exception will include information for locating the error in 
    the original XML document. Note that although the application will 
    receive a SAXParseException as the argument to the handlers in the 
    ErrorHandler interface, the application is not actually required 
    to raise the exception; instead, it can simply read the 
    information in it and take a different action. 
 
    Since this exception is a subclass of SAXException, it inherits 
    the ability to wrap another exception.""" 
 
    def __init__(self, msg, exception, locator): 
        "Creates the exception. The exception parameter is allowed to be None." 
        SAXException.__init__(self, msg, exception) 
        self._locator = locator 
 
        # We need to cache this stuff at construction time. 
        # If this exception is raised, the objects through which we must 
        # traverse to get this information may be deleted by the time 
        # it gets caught. 
        self._systemId = self._locator.getSystemId() 
        self._colnum = self._locator.getColumnNumber() 
        self._linenum = self._locator.getLineNumber() 
 
    def getColumnNumber(self): 
        """The column number of the end of the text where the exception 
        occurred.""" 
        return self._colnum 
 
    def getLineNumber(self): 
        "The line number of the end of the text where the exception occurred." 
        return self._linenum 
 
    def getPublicId(self): 
        "Get the public identifier of the entity where the exception occurred." 
        return self._locator.getPublicId() 
 
    def getSystemId(self): 
        "Get the system identifier of the entity where the exception occurred." 
        return self._systemId 
 
    def __str__(self): 
        "Create a string representation of the exception." 
        sysid = self.getSystemId() 
        if sysid is None: 
            sysid = "<unknown>" 
        linenum = self.getLineNumber() 
        if linenum is None: 
            linenum = "?" 
        colnum = self.getColumnNumber() 
        if colnum is None: 
            colnum = "?" 
        return "%s:%s:%s: %s" % (sysid, linenum, colnum, self._msg) 
 
 
# ===== SAXNOTRECOGNIZEDEXCEPTION ===== 
 
class SAXNotRecognizedException(SAXException): 
    """Exception class for an unrecognized identifier. 
 
    An XMLReader will raise this exception when it is confronted with an 
    unrecognized feature or property. SAX applications and extensions may 
    use this class for similar purposes.""" 
 
 
# ===== SAXNOTSUPPORTEDEXCEPTION ===== 
 
class SAXNotSupportedException(SAXException): 
    """Exception class for an unsupported operation. 
 
    An XMLReader will raise this exception when a service it cannot 
    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."""