| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | """Class based built-in exception hierarchy.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-10-02 01:23:47 +00:00
										 |  |  | New with Python 1.5, all standard built-in exceptions are now class objects by | 
					
						
							|  |  |  | default.  This gives Python's exception handling mechanism a more | 
					
						
							|  |  |  | object-oriented feel.  Traditionally they were string objects.  Python will | 
					
						
							|  |  |  | fallback to string based exceptions if the interpreter is invoked with the -X | 
					
						
							|  |  |  | option, or if some failure occurs during class exception initialization (in | 
					
						
							|  |  |  | this case a warning will be printed). | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-10-02 01:23:47 +00:00
										 |  |  | Most existing code should continue to work with class based exceptions.  Some | 
					
						
							|  |  |  | tricky uses of IOError may break, but the most common uses should work. | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-10-02 01:23:47 +00:00
										 |  |  | Here is a rundown of the class hierarchy.  You can change this by editing this | 
					
						
							|  |  |  | file, but it isn't recommended.  The class names described here are expected | 
					
						
							| 
									
										
										
										
											1998-12-22 13:50:33 +00:00
										 |  |  | to be found by the bltinmodule.c file.  If you add classes here, you must | 
					
						
							|  |  |  | modify bltinmodule.c or the exceptions won't be available in the __builtin__ | 
					
						
							|  |  |  | module, nor will they be accessible from C. | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-22 13:50:33 +00:00
										 |  |  | The classes with a `*' are new since Python 1.5.  They are defined as tuples | 
					
						
							| 
									
										
										
										
											1998-10-02 01:23:47 +00:00
										 |  |  | containing the derived exceptions when string-based exceptions are used.  If | 
					
						
							|  |  |  | you define your own class based exceptions, they should be derived from | 
					
						
							|  |  |  | Exception. | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Exception(*) | 
					
						
							|  |  |  |  | | 
					
						
							|  |  |  |  +-- StandardError(*) | 
					
						
							|  |  |  |       | | 
					
						
							|  |  |  |       +-- SystemExit | 
					
						
							|  |  |  |       +-- KeyboardInterrupt | 
					
						
							|  |  |  |       +-- ImportError | 
					
						
							| 
									
										
										
										
											1998-10-02 01:23:47 +00:00
										 |  |  |       +-- EnvironmentError(*) | 
					
						
							|  |  |  |       |    | | 
					
						
							|  |  |  |       |    +-- IOError | 
					
						
							|  |  |  |       |    +-- OSError(*) | 
					
						
							|  |  |  |       | | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |       +-- EOFError | 
					
						
							|  |  |  |       +-- RuntimeError | 
					
						
							| 
									
										
										
										
											1998-12-22 13:50:33 +00:00
										 |  |  |       |    | | 
					
						
							|  |  |  |       |    +-- NotImplementedError(*) | 
					
						
							|  |  |  |       | | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |       +-- NameError | 
					
						
							|  |  |  |       +-- AttributeError | 
					
						
							|  |  |  |       +-- SyntaxError | 
					
						
							|  |  |  |       +-- TypeError | 
					
						
							|  |  |  |       +-- AssertionError | 
					
						
							|  |  |  |       +-- LookupError(*) | 
					
						
							|  |  |  |       |    | | 
					
						
							|  |  |  |       |    +-- IndexError | 
					
						
							|  |  |  |       |    +-- KeyError | 
					
						
							|  |  |  |       | | 
					
						
							|  |  |  |       +-- ArithmeticError(*) | 
					
						
							|  |  |  |       |    | | 
					
						
							|  |  |  |       |    +-- OverflowError | 
					
						
							|  |  |  |       |    +-- ZeroDivisionError | 
					
						
							|  |  |  |       |    +-- FloatingPointError | 
					
						
							|  |  |  |       | | 
					
						
							|  |  |  |       +-- ValueError | 
					
						
							|  |  |  |       +-- SystemError | 
					
						
							|  |  |  |       +-- MemoryError | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Exception: | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Proposed base class for all exceptions.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     def __init__(self, *args): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         self.args = args | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __str__(self): | 
					
						
							|  |  |  |         if not self.args: | 
					
						
							|  |  |  |             return '' | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         elif len(self.args) == 1: | 
					
						
							|  |  |  |             return str(self.args[0]) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return str(self.args) | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __getitem__(self, i): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         return self.args[i] | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class StandardError(Exception): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Base class for all standard Python exceptions.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SyntaxError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Invalid syntax.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     filename = lineno = offset = text = None | 
					
						
							|  |  |  |     msg = "" | 
					
						
							|  |  |  |     def __init__(self, *args): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         self.args = args | 
					
						
							|  |  |  |         if len(self.args) >= 1: | 
					
						
							|  |  |  |             self.msg = self.args[0] | 
					
						
							|  |  |  |         if len(self.args) == 2: | 
					
						
							|  |  |  |             info = self.args[1] | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 self.filename, self.lineno, self.offset, self.text = info | 
					
						
							|  |  |  |             except: | 
					
						
							|  |  |  |                 pass | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     def __str__(self): | 
					
						
							|  |  |  |         return str(self.msg) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-08-12 02:38:11 +00:00
										 |  |  | class EnvironmentError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Base class for I/O related errors.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     def __init__(self, *args): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         self.args = args | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |         self.errno = None | 
					
						
							|  |  |  |         self.strerror = None | 
					
						
							| 
									
										
										
										
											1998-08-12 02:38:11 +00:00
										 |  |  |         self.filename = None | 
					
						
							|  |  |  |         if len(args) == 3: | 
					
						
							|  |  |  |             # open() errors give third argument which is the filename.  BUT, | 
					
						
							|  |  |  |             # so common in-place unpacking doesn't break, e.g.: | 
					
						
							|  |  |  |             # | 
					
						
							|  |  |  |             # except IOError, (errno, strerror): | 
					
						
							|  |  |  |             # | 
					
						
							|  |  |  |             # we hack args so that it only contains two items.  This also | 
					
						
							|  |  |  |             # means we need our own __str__() which prints out the filename | 
					
						
							|  |  |  |             # when it was supplied. | 
					
						
							|  |  |  |             self.errno, self.strerror, self.filename = args | 
					
						
							|  |  |  |             self.args = args[0:2] | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |         if len(args) == 2: | 
					
						
							|  |  |  |             # common case: PyErr_SetFromErrno() | 
					
						
							| 
									
										
										
										
											1998-08-12 02:38:11 +00:00
										 |  |  |             self.errno, self.strerror = args | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __str__(self): | 
					
						
							|  |  |  |         if self.filename is not None: | 
					
						
							|  |  |  |             return '[Errno %s] %s: %s' % (self.errno, self.strerror, | 
					
						
							|  |  |  |                                           repr(self.filename)) | 
					
						
							|  |  |  |         elif self.errno and self.strerror: | 
					
						
							|  |  |  |             return '[Errno %s] %s' % (self.errno, self.strerror) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             return StandardError.__str__(self) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IOError(EnvironmentError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """I/O operation failed.""" | 
					
						
							| 
									
										
										
										
											1998-08-12 02:38:11 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OSError(EnvironmentError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """OS system call failed.""" | 
					
						
							| 
									
										
										
										
											1998-08-12 02:38:11 +00:00
										 |  |  |     pass | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class RuntimeError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Unspecified run-time error.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							| 
									
										
										
										
											1998-12-22 13:50:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class NotImplementedError(RuntimeError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Method or function hasn't been implemented yet.""" | 
					
						
							| 
									
										
										
										
											1998-12-22 13:50:33 +00:00
										 |  |  |     pass | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class SystemError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Internal error in the Python interpreter.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Please report this to the Python maintainer, along with the traceback, | 
					
						
							|  |  |  |     the Python version, and the hardware/OS platform and version."""
 | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class EOFError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Read beyond end of file.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ImportError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Import can't find module, or can't find name in module.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TypeError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Inappropriate argument type.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ValueError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Inappropriate argument value (of correct type).""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KeyboardInterrupt(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Program interrupted by user.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AssertionError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Assertion failed.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ArithmeticError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Base class for arithmetic errors.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class OverflowError(ArithmeticError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Result too large to be represented.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FloatingPointError(ArithmeticError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Floating point operation failed.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ZeroDivisionError(ArithmeticError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Second argument to a division or modulo operation was zero.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LookupError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Base class for lookup errors.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IndexError(LookupError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Sequence index out of range.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KeyError(LookupError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Mapping key not found.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AttributeError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Attribute not found.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NameError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Name not found locally or globally.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MemoryError(StandardError): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Out of memory.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SystemExit(Exception): | 
					
						
							| 
									
										
										
										
											1999-01-25 21:57:29 +00:00
										 |  |  |     """Request to exit from the interpreter.""" | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |     def __init__(self, *args): | 
					
						
							| 
									
										
										
										
											1998-03-26 22:14:20 +00:00
										 |  |  |         self.args = args | 
					
						
							| 
									
										
										
										
											1997-10-06 20:19:59 +00:00
										 |  |  |         if len(args) == 0: | 
					
						
							|  |  |  |             self.code = None | 
					
						
							|  |  |  |         elif len(args) == 1: | 
					
						
							|  |  |  |             self.code = args[0] | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.code = args |