| """Class based built-in exception hierarchy. | 
 |  | 
 | This is a new feature whereby all the standard built-in exceptions, | 
 | traditionally string objects, are replaced with classes.  This gives | 
 | Python's exception handling mechanism a more object-oriented feel. | 
 |  | 
 | 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. | 
 |  | 
 | To disable this feature, start the Python executable with the -X option. | 
 |  | 
 | Here is a rundown of the class hierarchy.  You can change this by | 
 | editing this file, but it isn't recommended.  The classes with a `*' | 
 | are new with this feature.  They are defined as tuples containing the | 
 | derived exceptions when string-based exceptions are used. | 
 |  | 
 | Exception(*) | 
 |  | | 
 |  +-- StandardError(*) | 
 |       | | 
 |       +-- SystemExit | 
 |       +-- KeyboardInterrupt | 
 |       +-- ImportError | 
 |       +-- IOError | 
 |       +-- EOFError | 
 |       +-- RuntimeError | 
 |       +-- NameError | 
 |       +-- AttributeError | 
 |       +-- SyntaxError | 
 |       +-- TypeError | 
 |       +-- AssertionError | 
 |       +-- LookupError(*) | 
 |       |    | | 
 |       |    +-- IndexError | 
 |       |    +-- KeyError | 
 |       | | 
 |       +-- ArithmeticError(*) | 
 |       |    | | 
 |       |    +-- OverflowError | 
 |       |    +-- ZeroDivisionError | 
 |       |    +-- FloatingPointError | 
 |       | | 
 |       +-- ValueError | 
 |       +-- SystemError | 
 |       +-- MemoryError | 
 | """ | 
 |  | 
 | class Exception: | 
 |     def __init__(self, *args): | 
 | 	self.args = args | 
 |  | 
 |     def __str__(self): | 
 |         if not self.args: | 
 |             return '' | 
 | 	elif len(self.args) == 1: | 
 | 	    return str(self.args[0]) | 
 | 	else: | 
 | 	    return str(self.args) | 
 |  | 
 |     def __getitem__(self, i): | 
 | 	return self.args[i] | 
 |  | 
 | class StandardError(Exception): | 
 |     pass | 
 |  | 
 | class SyntaxError(StandardError): | 
 |     filename = lineno = offset = text = None | 
 |     msg = "" | 
 |     def __init__(self, *args): | 
 | 	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 | 
 |     def __str__(self): | 
 |         return str(self.msg) | 
 |  | 
 | class IOError(StandardError): | 
 |     def __init__(self, *args): | 
 | 	self.args = args | 
 |         self.errno = None | 
 |         self.strerror = None | 
 |         if len(args) == 2: | 
 |             # common case: PyErr_SetFromErrno() | 
 |             self.errno = args[0] | 
 |             self.strerror = args[1] | 
 |  | 
 | class RuntimeError(StandardError): | 
 |     pass | 
 |  | 
 | class SystemError(StandardError): | 
 |     pass | 
 |  | 
 | class EOFError(StandardError): | 
 |     pass | 
 |  | 
 | class ImportError(StandardError): | 
 |     pass | 
 |  | 
 | class TypeError(StandardError): | 
 |     pass | 
 |  | 
 | class ValueError(StandardError): | 
 |     pass | 
 |  | 
 | class KeyboardInterrupt(StandardError): | 
 |     pass | 
 |  | 
 | class AssertionError(StandardError): | 
 |     pass | 
 |  | 
 | class ArithmeticError(StandardError): | 
 |     pass | 
 |  | 
 | class OverflowError(ArithmeticError): | 
 |     pass | 
 |  | 
 | class FloatingPointError(ArithmeticError): | 
 |     pass | 
 |  | 
 | class ZeroDivisionError(ArithmeticError): | 
 |     pass | 
 |  | 
 | class LookupError(StandardError): | 
 |     pass | 
 |  | 
 | class IndexError(LookupError): | 
 |     pass | 
 |  | 
 | class KeyError(LookupError): | 
 |     pass | 
 |  | 
 | class AttributeError(StandardError): | 
 |     pass | 
 |  | 
 | class NameError(StandardError): | 
 |     pass | 
 |  | 
 | class MemoryError(StandardError): | 
 |     pass | 
 |  | 
 | class SystemExit(Exception): | 
 |     def __init__(self, *args): | 
 | 	self.args = args | 
 |         if len(args) == 0: | 
 |             self.code = None | 
 |         elif len(args) == 1: | 
 |             self.code = args[0] | 
 |         else: | 
 |             self.code = args |