summaryrefslogtreecommitdiffstats
path: root/Lib/exceptions.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1997-08-29 21:59:26 (GMT)
committerBarry Warsaw <barry@python.org>1997-08-29 21:59:26 (GMT)
commit3e613ce79b45be05065804f3f08ec94813dc74f3 (patch)
tree7171317165bf24e0a868a5393a5f47aed32aeac8 /Lib/exceptions.py
parent6ed41a0a873ba46247197809b396c6532617251e (diff)
downloadcpython-3e613ce79b45be05065804f3f08ec94813dc74f3.zip
cpython-3e613ce79b45be05065804f3f08ec94813dc74f3.tar.gz
cpython-3e613ce79b45be05065804f3f08ec94813dc74f3.tar.bz2
New file, which is imported by the built-in module when python is
started with the -X option. This file contains the definitions for the built-in exception classes.
Diffstat (limited to 'Lib/exceptions.py')
-rw-r--r--Lib/exceptions.py164
1 files changed, 164 insertions, 0 deletions
diff --git a/Lib/exceptions.py b/Lib/exceptions.py
new file mode 100644
index 0000000..4b03969
--- /dev/null
+++ b/Lib/exceptions.py
@@ -0,0 +1,164 @@
+"""Class based built-in exception hierarchy.
+
+This is an experimental new feature whereby all the standard built-in
+exceptions, traditionally string object, 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 use this new 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 and are not available unless class based
+exceptions are used.
+
+StandardError(*)
+ |
+ +-- SystemExit
+ +-- KeyboardInterrupt
+ +-- ImportError
+ +-- IOError
+ +-- EOFError
+ +-- RuntimeError
+ +-- NameError
+ +-- AttributeError
+ +-- SyntaxError
+ +-- TypeError
+ +-- AssertionError
+ +-- LookupError(*)
+ | |
+ | +-- IndexError
+ | +-- KeyError
+ |
+ +-- NumberError(*)
+ | |
+ | +-- OverflowError
+ | +-- ZeroDivisionError
+ | +-- FloatingPointError
+ |
+ +-- ValueError
+ +-- SystemError
+ +-- MemoryError
+"""
+
+class 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
+
+ def __str__(self):
+ if self.args == None:
+ return ''
+ elif type(self.args) == type(''):
+ return self.args
+ else:
+ return `self.args`
+
+ def __getitem__(self, i):
+ if type(self.args) == type(()):
+ return self.args[i]
+ elif i == 0:
+ return self.args
+ else:
+ raise IndexError
+
+class SyntaxError(StandardError):
+ def __init__(self, msg, info):
+ self.msg = msg
+ self.filename, self.lineno, self.offset, self.text = info
+
+ def __str__(self):
+ return msg
+
+
+class IOError(StandardError):
+ def __init__(self, *args):
+ self.errno = None
+ self.strerror = None
+ if len(args) == 1:
+ # de-tuplify
+ self.args = args[0]
+ elif 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
+
+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 NumberError(StandardError):
+ pass
+
+class OverflowError(NumberError):
+ pass
+
+class FloatingPointError(NumberError):
+ pass
+
+class ZeroDivisionError(NumberError):
+ pass
+
+class LookupError(StandardError):
+ pass
+
+class IndexError(LookupError):
+ pass
+
+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