blob: 686ba381587be8ad8ffda3ab67407b3b4549bc6c [file] [log] [blame]
Barry Warsaw3e613ce1997-08-29 21:59:26 +00001"""Class based built-in exception hierarchy.
2
Guido van Rossume8fd1431997-09-08 02:47:46 +00003This is a new feature whereby all the standard built-in exceptions,
4traditionally string objects, are replaced with classes. This gives
5Python's exception handling mechanism a more object-oriented feel.
Barry Warsaw3e613ce1997-08-29 21:59:26 +00006
7Most existing code should continue to work with class based
8exceptions. Some tricky uses of IOError may break, but the most
9common uses should work.
10
Guido van Rossume8fd1431997-09-08 02:47:46 +000011To disable this feature, start the Python executable with the -X option.
Barry Warsaw3e613ce1997-08-29 21:59:26 +000012
13Here is a rundown of the class hierarchy. You can change this by
14editing this file, but it isn't recommended. The classes with a `*'
Guido van Rossume8fd1431997-09-08 02:47:46 +000015are new with this feature. They are defined as tuples containing the
16derived exceptions when string-based exceptions are used.
Barry Warsaw3e613ce1997-08-29 21:59:26 +000017
Guido van Rossumc56ba381997-09-16 18:42:04 +000018Exception(*)
Barry Warsaw3e613ce1997-08-29 21:59:26 +000019 |
Guido van Rossumc56ba381997-09-16 18:42:04 +000020 +-- StandardError(*)
21 |
22 +-- SystemExit
23 +-- KeyboardInterrupt
24 +-- ImportError
25 +-- IOError
26 +-- EOFError
27 +-- RuntimeError
28 +-- NameError
29 +-- AttributeError
30 +-- SyntaxError
31 +-- TypeError
32 +-- AssertionError
33 +-- LookupError(*)
34 | |
35 | +-- IndexError
36 | +-- KeyError
37 |
Barry Warsaw25131fa1997-09-16 21:50:59 +000038 +-- ArithmeticError(*)
Guido van Rossumc56ba381997-09-16 18:42:04 +000039 | |
40 | +-- OverflowError
41 | +-- ZeroDivisionError
42 | +-- FloatingPointError
43 |
44 +-- ValueError
45 +-- SystemError
46 +-- MemoryError
Barry Warsaw3e613ce1997-08-29 21:59:26 +000047"""
48
Guido van Rossumc56ba381997-09-16 18:42:04 +000049class Exception:
Barry Warsaw3e613ce1997-08-29 21:59:26 +000050 def __init__(self, *args):
Guido van Rossumc56ba381997-09-16 18:42:04 +000051 self.args = args
Barry Warsaw3e613ce1997-08-29 21:59:26 +000052
53 def __str__(self):
Guido van Rossumc56ba381997-09-16 18:42:04 +000054 if not self.args:
Barry Warsaw3e613ce1997-08-29 21:59:26 +000055 return ''
Guido van Rossumc56ba381997-09-16 18:42:04 +000056 elif len(self.args) == 1:
57 return str(self.args[0])
Guido van Rossumf394f561997-09-05 19:00:56 +000058 else:
59 return str(self.args)
Barry Warsaw3e613ce1997-08-29 21:59:26 +000060
Guido van Rossumc56ba381997-09-16 18:42:04 +000061class StandardError(Exception):
Barry Warsaw3e613ce1997-08-29 21:59:26 +000062 def __getitem__(self, i):
Guido van Rossumc56ba381997-09-16 18:42:04 +000063 return self.args[i]
Barry Warsaw3e613ce1997-08-29 21:59:26 +000064
65class SyntaxError(StandardError):
Guido van Rossumf394f561997-09-05 19:00:56 +000066 filename = lineno = offset = text = None
Guido van Rossumc56ba381997-09-16 18:42:04 +000067 msg = ""
68 def __init__(self, *args):
69 self.args = args
70 if len(self.args) >= 1:
71 self.msg = self.args[0]
72 if len(self.args) == 2:
73 info = self.args[1]
74 try:
75 self.filename, self.lineno, self.offset, self.text = info
76 except:
77 pass
Barry Warsaw3e613ce1997-08-29 21:59:26 +000078 def __str__(self):
Guido van Rossumf394f561997-09-05 19:00:56 +000079 return str(self.msg)
Barry Warsaw3e613ce1997-08-29 21:59:26 +000080
Barry Warsaw3e613ce1997-08-29 21:59:26 +000081class IOError(StandardError):
82 def __init__(self, *args):
Guido van Rossumc56ba381997-09-16 18:42:04 +000083 self.args = args
Barry Warsaw3e613ce1997-08-29 21:59:26 +000084 self.errno = None
85 self.strerror = None
Guido van Rossumc56ba381997-09-16 18:42:04 +000086 if len(args) == 2:
Barry Warsaw3e613ce1997-08-29 21:59:26 +000087 # common case: PyErr_SetFromErrno()
Barry Warsaw3e613ce1997-08-29 21:59:26 +000088 self.errno = args[0]
89 self.strerror = args[1]
Barry Warsaw3e613ce1997-08-29 21:59:26 +000090
91class RuntimeError(StandardError):
92 pass
93
94class SystemError(StandardError):
95 pass
96
97class EOFError(StandardError):
98 pass
99
100class ImportError(StandardError):
101 pass
102
103class TypeError(StandardError):
104 pass
105
106class ValueError(StandardError):
107 pass
108
109class KeyboardInterrupt(StandardError):
110 pass
111
112class AssertionError(StandardError):
113 pass
114
Barry Warsaw25131fa1997-09-16 21:50:59 +0000115class ArithmeticError(StandardError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000116 pass
117
Barry Warsaw25131fa1997-09-16 21:50:59 +0000118class OverflowError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000119 pass
120
Barry Warsaw25131fa1997-09-16 21:50:59 +0000121class FloatingPointError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000122 pass
123
Barry Warsaw25131fa1997-09-16 21:50:59 +0000124class ZeroDivisionError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000125 pass
126
127class LookupError(StandardError):
128 pass
129
130class IndexError(LookupError):
131 pass
132
133class KeyError(LookupError):
134 pass
135
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000136class AttributeError(StandardError):
137 pass
138
139class NameError(StandardError):
140 pass
141
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000142class MemoryError(StandardError):
143 pass
Guido van Rossumc56ba381997-09-16 18:42:04 +0000144
145class SystemExit(Exception):
146 def __init__(self, *args):
147 self.args = args
148 if len(args) == 0:
149 self.code = None
150 elif len(args) == 1:
151 self.code = args[0]
152 else:
153 self.code = args