blob: ba63be6ecdfe26412f068f7aa5993e889087263d [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 Rossum45e2fbc1998-03-26 21:13:24 +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 Rossum45e2fbc1998-03-26 21:13:24 +000056 elif len(self.args) == 1:
57 return str(self.args[0])
58 else:
59 return str(self.args)
Barry Warsaw3e613ce1997-08-29 21:59:26 +000060
61 def __getitem__(self, i):
Guido van Rossum45e2fbc1998-03-26 21:13:24 +000062 return self.args[i]
Barry Warsaw3e613ce1997-08-29 21:59:26 +000063
Fred Drake596db311997-10-06 15:48:20 +000064class StandardError(Exception):
65 pass
66
Barry Warsaw3e613ce1997-08-29 21:59:26 +000067class SyntaxError(StandardError):
Guido van Rossumf394f561997-09-05 19:00:56 +000068 filename = lineno = offset = text = None
Guido van Rossumc56ba381997-09-16 18:42:04 +000069 msg = ""
70 def __init__(self, *args):
Guido van Rossum45e2fbc1998-03-26 21:13:24 +000071 self.args = args
72 if len(self.args) >= 1:
73 self.msg = self.args[0]
74 if len(self.args) == 2:
75 info = self.args[1]
76 try:
77 self.filename, self.lineno, self.offset, self.text = info
78 except:
79 pass
Barry Warsaw3e613ce1997-08-29 21:59:26 +000080 def __str__(self):
Guido van Rossumf394f561997-09-05 19:00:56 +000081 return str(self.msg)
Barry Warsaw3e613ce1997-08-29 21:59:26 +000082
Barry Warsaw3e613ce1997-08-29 21:59:26 +000083class IOError(StandardError):
84 def __init__(self, *args):
Guido van Rossum45e2fbc1998-03-26 21:13:24 +000085 self.args = args
Barry Warsaw3e613ce1997-08-29 21:59:26 +000086 self.errno = None
87 self.strerror = None
Guido van Rossumc56ba381997-09-16 18:42:04 +000088 if len(args) == 2:
Barry Warsaw3e613ce1997-08-29 21:59:26 +000089 # common case: PyErr_SetFromErrno()
Barry Warsaw3e613ce1997-08-29 21:59:26 +000090 self.errno = args[0]
91 self.strerror = args[1]
Barry Warsaw3e613ce1997-08-29 21:59:26 +000092
93class RuntimeError(StandardError):
94 pass
95
96class SystemError(StandardError):
97 pass
98
99class EOFError(StandardError):
100 pass
101
102class ImportError(StandardError):
103 pass
104
105class TypeError(StandardError):
106 pass
107
108class ValueError(StandardError):
109 pass
110
111class KeyboardInterrupt(StandardError):
112 pass
113
114class AssertionError(StandardError):
115 pass
116
Barry Warsaw25131fa1997-09-16 21:50:59 +0000117class ArithmeticError(StandardError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000118 pass
119
Barry Warsaw25131fa1997-09-16 21:50:59 +0000120class OverflowError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000121 pass
122
Barry Warsaw25131fa1997-09-16 21:50:59 +0000123class FloatingPointError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000124 pass
125
Barry Warsaw25131fa1997-09-16 21:50:59 +0000126class ZeroDivisionError(ArithmeticError):
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000127 pass
128
129class LookupError(StandardError):
130 pass
131
132class IndexError(LookupError):
133 pass
134
135class KeyError(LookupError):
136 pass
137
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000138class AttributeError(StandardError):
139 pass
140
141class NameError(StandardError):
142 pass
143
Barry Warsaw3e613ce1997-08-29 21:59:26 +0000144class MemoryError(StandardError):
145 pass
Guido van Rossumc56ba381997-09-16 18:42:04 +0000146
147class SystemExit(Exception):
148 def __init__(self, *args):
Guido van Rossum45e2fbc1998-03-26 21:13:24 +0000149 self.args = args
Guido van Rossumc56ba381997-09-16 18:42:04 +0000150 if len(args) == 0:
151 self.code = None
152 elif len(args) == 1:
153 self.code = args[0]
154 else:
155 self.code = args