Mercurial > cpython-lru_cache-weakref
diff Lib/exceptions.py @ 6317:71b40cc4cc03 legacy-trunk
Two subtle changes:
(1) Introduce Exception as the conceptual root class for all exceptions.
(2) Do less work in __init__(), and more in __str__ (store args
unchanged).
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 16 Sep 1997 18:42:04 +0000 |
| parents | 775899583da6 |
| children | 5cdc3ca053d6 |
line wrap: on
line diff
--- a/Lib/exceptions.py Tue Sep 16 16:11:28 1997 +0000 +++ b/Lib/exceptions.py Tue Sep 16 18:42:04 1997 +0000 @@ -15,88 +15,78 @@ are new with this feature. They are defined as tuples containing the derived exceptions when string-based exceptions are used. -StandardError(*) +Exception(*) | - +-- SystemExit - +-- KeyboardInterrupt - +-- ImportError - +-- IOError - +-- EOFError - +-- RuntimeError - +-- NameError - +-- AttributeError - +-- SyntaxError - +-- TypeError - +-- AssertionError - +-- LookupError(*) - | | - | +-- IndexError - | +-- KeyError - | - +-- NumberError(*) - | | - | +-- OverflowError - | +-- ZeroDivisionError - | +-- FloatingPointError - | - +-- ValueError - +-- SystemError - +-- MemoryError + +-- StandardError(*) + | + +-- SystemExit + +-- KeyboardInterrupt + +-- ImportError + +-- IOError + +-- EOFError + +-- RuntimeError + +-- NameError + +-- AttributeError + +-- SyntaxError + +-- TypeError + +-- AssertionError + +-- LookupError(*) + | | + | +-- IndexError + | +-- KeyError + | + +-- NumberError(*) + | | + | +-- OverflowError + | +-- ZeroDivisionError + | +-- FloatingPointError + | + +-- ValueError + +-- SystemError + +-- MemoryError """ -class StandardError: +class Exception: def __init__(self, *args): - if len(args) == 0: - self.args = None - elif len(args) == 1: - # de-tuplify - self.args = args[0] - else: - self.args = args + self.args = args def __str__(self): - if self.args == None: + if not self.args: return '' + elif len(self.args) == 1: + return str(self.args[0]) else: return str(self.args) +class StandardError(Exception): def __getitem__(self, i): - if type(self.args) == type(()): - return self.args[i] - elif i == 0: - return self.args - else: - raise IndexError + return self.args[i] class SyntaxError(StandardError): filename = lineno = offset = text = None - def __init__(self, msg, info=None): - self.msg = msg - if info: - self.args = msg - else: - self.args = (msg, info) - if info: - self.filename, self.lineno, self.offset, self.text = info + 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) == 1: - # de-tuplify - self.args = args[0] - elif len(args) == 2: + if len(args) == 2: # common case: PyErr_SetFromErrno() - self.args = args self.errno = args[0] self.strerror = args[1] - else: - self.args = args - class RuntimeError(StandardError): pass @@ -143,24 +133,21 @@ class KeyError(LookupError): pass -# debate: should these two inherit from LookupError? class AttributeError(StandardError): pass class NameError(StandardError): pass -class SystemExit(StandardError): - def __init__(self, *args): - if len(args) == 0: - self.args = None - elif len(args) == 1: - # de-tuplify - self.args = args[0] - else: - self.args = args - self.code = self.args - - 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
