mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			192 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Class based built-in exception hierarchy.
 | 
						|
 | 
						|
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).
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
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
 | 
						|
to be found by the bltinmodule.c file.
 | 
						|
 | 
						|
The classes with a `*' are new as of Python 1.5.  They are defined as tuples
 | 
						|
containing the derived exceptions when string-based exceptions are used.  If
 | 
						|
you define your own class based exceptions, they should be derived from
 | 
						|
Exception.
 | 
						|
 | 
						|
Exception(*)
 | 
						|
 |
 | 
						|
 +-- StandardError(*)
 | 
						|
      |
 | 
						|
      +-- SystemExit
 | 
						|
      +-- KeyboardInterrupt
 | 
						|
      +-- ImportError
 | 
						|
      +-- EnvironmentError(*)
 | 
						|
      |    |
 | 
						|
      |    +-- IOError
 | 
						|
      |    +-- OSError(*)
 | 
						|
      |
 | 
						|
      +-- 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 EnvironmentError(StandardError):
 | 
						|
    """Base class for exceptions that occur outside the Python system.
 | 
						|
    Primarily used as a base class for OSError and IOError."""
 | 
						|
    def __init__(self, *args):
 | 
						|
        self.args = args
 | 
						|
        self.errno = None
 | 
						|
        self.strerror = None
 | 
						|
        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]
 | 
						|
        if len(args) == 2:
 | 
						|
            # common case: PyErr_SetFromErrno()
 | 
						|
            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):
 | 
						|
    pass
 | 
						|
 | 
						|
class OSError(EnvironmentError):
 | 
						|
    """Used by the posix module."""
 | 
						|
    pass
 | 
						|
 | 
						|
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
 |