blob: 43d1c2da40f34863c40371054537601786dc9ad1 [file] [log] [blame]
Guido van Rossuma11cccc1997-10-06 20:19:59 +00001"""Class based built-in exception hierarchy.
2
Guido van Rossum64e736b1998-10-02 01:23:47 +00003New with Python 1.5, all standard built-in exceptions are now class objects by
4default. This gives Python's exception handling mechanism a more
5object-oriented feel. Traditionally they were string objects. Python will
6fallback to string based exceptions if the interpreter is invoked with the -X
7option, or if some failure occurs during class exception initialization (in
8this case a warning will be printed).
Guido van Rossuma11cccc1997-10-06 20:19:59 +00009
Guido van Rossum64e736b1998-10-02 01:23:47 +000010Most existing code should continue to work with class based exceptions. Some
11tricky uses of IOError may break, but the most common uses should work.
Guido van Rossuma11cccc1997-10-06 20:19:59 +000012
Guido van Rossum64e736b1998-10-02 01:23:47 +000013Here is a rundown of the class hierarchy. You can change this by editing this
Guido van Rossum9a744a91999-04-08 20:27:54 +000014file, but it isn't recommended because the old string based exceptions won't
15be kept in sync. The class names described here are expected to be found by
16the bltinmodule.c file. If you add classes here, you must modify
17bltinmodule.c or the exceptions won't be available in the __builtin__ module,
18nor will they be accessible from C.
Guido van Rossuma11cccc1997-10-06 20:19:59 +000019
Guido van Rossum7ea1d971998-12-22 13:50:33 +000020The classes with a `*' are new since Python 1.5. They are defined as tuples
Guido van Rossum64e736b1998-10-02 01:23:47 +000021containing the derived exceptions when string-based exceptions are used. If
22you define your own class based exceptions, they should be derived from
23Exception.
Guido van Rossuma11cccc1997-10-06 20:19:59 +000024
25Exception(*)
26 |
Guido van Rossum9a744a91999-04-08 20:27:54 +000027 +-- SystemExit
Guido van Rossuma11cccc1997-10-06 20:19:59 +000028 +-- StandardError(*)
29 |
Guido van Rossuma11cccc1997-10-06 20:19:59 +000030 +-- KeyboardInterrupt
31 +-- ImportError
Guido van Rossum64e736b1998-10-02 01:23:47 +000032 +-- EnvironmentError(*)
33 | |
34 | +-- IOError
35 | +-- OSError(*)
Guido van Rossumaad67612000-05-08 17:31:04 +000036 | |
37 | +-- WindowsError(*)
Guido van Rossum64e736b1998-10-02 01:23:47 +000038 |
Guido van Rossuma11cccc1997-10-06 20:19:59 +000039 +-- EOFError
40 +-- RuntimeError
Guido van Rossum7ea1d971998-12-22 13:50:33 +000041 | |
42 | +-- NotImplementedError(*)
43 |
Guido van Rossuma11cccc1997-10-06 20:19:59 +000044 +-- NameError
Guido van Rossumaad67612000-05-08 17:31:04 +000045 | |
46 | +-- UnboundLocalError(*)
47 |
Guido van Rossuma11cccc1997-10-06 20:19:59 +000048 +-- AttributeError
49 +-- SyntaxError
50 +-- TypeError
51 +-- AssertionError
52 +-- LookupError(*)
53 | |
54 | +-- IndexError
55 | +-- KeyError
56 |
57 +-- ArithmeticError(*)
58 | |
59 | +-- OverflowError
60 | +-- ZeroDivisionError
61 | +-- FloatingPointError
62 |
63 +-- ValueError
Guido van Rossumaad67612000-05-08 17:31:04 +000064 | |
65 | +-- UnicodeError(*)
66 |
Guido van Rossuma11cccc1997-10-06 20:19:59 +000067 +-- SystemError
68 +-- MemoryError
69"""
70
71class Exception:
Guido van Rossum3e0d3191999-01-25 21:57:29 +000072 """Proposed base class for all exceptions."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +000073 def __init__(self, *args):
Guido van Rossum548703a1998-03-26 22:14:20 +000074 self.args = args
Guido van Rossuma11cccc1997-10-06 20:19:59 +000075
76 def __str__(self):
77 if not self.args:
78 return ''
Guido van Rossum548703a1998-03-26 22:14:20 +000079 elif len(self.args) == 1:
80 return str(self.args[0])
81 else:
82 return str(self.args)
Guido van Rossuma11cccc1997-10-06 20:19:59 +000083
84 def __getitem__(self, i):
Guido van Rossum548703a1998-03-26 22:14:20 +000085 return self.args[i]
Guido van Rossuma11cccc1997-10-06 20:19:59 +000086
87class StandardError(Exception):
Guido van Rossum3e0d3191999-01-25 21:57:29 +000088 """Base class for all standard Python exceptions."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +000089 pass
90
91class SyntaxError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +000092 """Invalid syntax."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +000093 filename = lineno = offset = text = None
94 msg = ""
95 def __init__(self, *args):
Guido van Rossum548703a1998-03-26 22:14:20 +000096 self.args = args
97 if len(self.args) >= 1:
98 self.msg = self.args[0]
99 if len(self.args) == 2:
100 info = self.args[1]
101 try:
102 self.filename, self.lineno, self.offset, self.text = info
103 except:
104 pass
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000105 def __str__(self):
106 return str(self.msg)
107
Guido van Rossume03c0501998-08-12 02:38:11 +0000108class EnvironmentError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000109 """Base class for I/O related errors."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000110 def __init__(self, *args):
Guido van Rossum548703a1998-03-26 22:14:20 +0000111 self.args = args
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000112 self.errno = None
113 self.strerror = None
Guido van Rossume03c0501998-08-12 02:38:11 +0000114 self.filename = None
115 if len(args) == 3:
116 # open() errors give third argument which is the filename. BUT,
117 # so common in-place unpacking doesn't break, e.g.:
118 #
119 # except IOError, (errno, strerror):
120 #
121 # we hack args so that it only contains two items. This also
122 # means we need our own __str__() which prints out the filename
123 # when it was supplied.
124 self.errno, self.strerror, self.filename = args
125 self.args = args[0:2]
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000126 if len(args) == 2:
127 # common case: PyErr_SetFromErrno()
Guido van Rossume03c0501998-08-12 02:38:11 +0000128 self.errno, self.strerror = args
129
130 def __str__(self):
131 if self.filename is not None:
132 return '[Errno %s] %s: %s' % (self.errno, self.strerror,
133 repr(self.filename))
134 elif self.errno and self.strerror:
135 return '[Errno %s] %s' % (self.errno, self.strerror)
136 else:
137 return StandardError.__str__(self)
138
139class IOError(EnvironmentError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000140 """I/O operation failed."""
Guido van Rossume03c0501998-08-12 02:38:11 +0000141 pass
142
143class OSError(EnvironmentError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000144 """OS system call failed."""
Guido van Rossume03c0501998-08-12 02:38:11 +0000145 pass
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000146
Guido van Rossumaad67612000-05-08 17:31:04 +0000147class WindowsError(OSError):
148 """MS-Windows OS system call failed."""
149 pass
150
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000151class RuntimeError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000152 """Unspecified run-time error."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000153 pass
154
Guido van Rossum7ea1d971998-12-22 13:50:33 +0000155class NotImplementedError(RuntimeError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000156 """Method or function hasn't been implemented yet."""
Guido van Rossum7ea1d971998-12-22 13:50:33 +0000157 pass
158
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000159class SystemError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000160 """Internal error in the Python interpreter.
161
162 Please report this to the Python maintainer, along with the traceback,
163 the Python version, and the hardware/OS platform and version."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000164 pass
165
166class EOFError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000167 """Read beyond end of file."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000168 pass
169
170class ImportError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000171 """Import can't find module, or can't find name in module."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000172 pass
173
174class TypeError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000175 """Inappropriate argument type."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000176 pass
177
178class ValueError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000179 """Inappropriate argument value (of correct type)."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000180 pass
181
182class KeyboardInterrupt(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000183 """Program interrupted by user."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000184 pass
185
186class AssertionError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000187 """Assertion failed."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000188 pass
189
190class ArithmeticError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000191 """Base class for arithmetic errors."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000192 pass
193
194class OverflowError(ArithmeticError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000195 """Result too large to be represented."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000196 pass
197
198class FloatingPointError(ArithmeticError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000199 """Floating point operation failed."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000200 pass
201
202class ZeroDivisionError(ArithmeticError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000203 """Second argument to a division or modulo operation was zero."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000204 pass
205
206class LookupError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000207 """Base class for lookup errors."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000208 pass
209
210class IndexError(LookupError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000211 """Sequence index out of range."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000212 pass
213
214class KeyError(LookupError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000215 """Mapping key not found."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000216 pass
217
218class AttributeError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000219 """Attribute not found."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000220 pass
221
222class NameError(StandardError):
Guido van Rossumaad67612000-05-08 17:31:04 +0000223 """Name not found globally."""
224 pass
225
226class UnboundLocalError(NameError):
227 """Local name referenced but not bound to a value."""
228 pass
229
230class UnicodeError(ValueError):
231 """Unicode related error."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000232 pass
233
234class MemoryError(StandardError):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000235 """Out of memory."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000236 pass
237
238class SystemExit(Exception):
Guido van Rossum3e0d3191999-01-25 21:57:29 +0000239 """Request to exit from the interpreter."""
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000240 def __init__(self, *args):
Guido van Rossum548703a1998-03-26 22:14:20 +0000241 self.args = args
Guido van Rossuma11cccc1997-10-06 20:19:59 +0000242 if len(args) == 0:
243 self.code = None
244 elif len(args) == 1:
245 self.code = args[0]
246 else:
247 self.code = args