Updated for 2.1a3
[python/dscho.git] / Lib / test / test_exceptions.py
blob9f42659adc527da6c026f52ae93da8c47a4567c2
1 # Python test set -- part 5, built-in exceptions
3 from test_support import *
4 from types import ClassType
6 print '5. Built-in exceptions'
7 # XXX This is not really enough, each *operation* should be tested!
9 def test_raise_catch(exc):
10 try:
11 raise exc, "spam"
12 except exc, err:
13 buf = str(err)
14 try:
15 raise exc("spam")
16 except exc, err:
17 buf = str(err)
18 print buf
20 def r(thing):
21 test_raise_catch(thing)
22 if isinstance(thing, ClassType):
23 print thing.__name__
24 else:
25 print thing
27 r(AttributeError)
28 import sys
29 try: x = sys.undefined_attribute
30 except AttributeError: pass
32 r(EOFError)
33 import sys
34 fp = open(TESTFN, 'w')
35 fp.close()
36 fp = open(TESTFN, 'r')
37 savestdin = sys.stdin
38 try:
39 try:
40 sys.stdin = fp
41 x = raw_input()
42 except EOFError:
43 pass
44 finally:
45 sys.stdin = savestdin
46 fp.close()
48 r(IOError)
49 try: open('this file does not exist', 'r')
50 except IOError: pass
52 r(ImportError)
53 try: import undefined_module
54 except ImportError: pass
56 r(IndexError)
57 x = []
58 try: a = x[10]
59 except IndexError: pass
61 r(KeyError)
62 x = {}
63 try: a = x['key']
64 except KeyError: pass
66 r(KeyboardInterrupt)
67 print '(not testable in a script)'
69 r(MemoryError)
70 print '(not safe to test)'
72 r(NameError)
73 try: x = undefined_variable
74 except NameError: pass
76 r(OverflowError)
77 x = 1
78 try:
79 while 1: x = x+x
80 except OverflowError: pass
82 r(RuntimeError)
83 print '(not used any more?)'
85 r(SyntaxError)
86 try: exec '/\n'
87 except SyntaxError: pass
89 # make sure the right exception message is raised for each of these
90 # code fragments:
92 def ckmsg(src, msg):
93 try:
94 compile(src, '<fragment>', 'exec')
95 except SyntaxError, e:
96 print e.msg
97 if e.msg == msg:
98 print "ok"
99 else:
100 print "expected:", msg
101 else:
102 print "failed to get expected SyntaxError"
104 s = '''\
105 while 1:
106 try:
107 pass
108 finally:
109 continue
111 ckmsg(s, "'continue' not supported inside 'finally' clause")
112 s = '''\
113 try:
114 continue
115 except:
116 pass
118 ckmsg(s, "'continue' not properly in loop")
119 ckmsg("continue\n", "'continue' not properly in loop")
121 r(IndentationError)
123 r(TabError)
124 # can only be tested under -tt, and is the only test for -tt
125 #try: compile("try:\n\t1/0\n \t1/0\nfinally:\n pass\n", '<string>', 'exec')
126 #except TabError: pass
127 #else: raise TestFailed
129 r(SystemError)
130 print '(hard to reproduce)'
132 r(SystemExit)
133 import sys
134 try: sys.exit(0)
135 except SystemExit: pass
137 r(TypeError)
138 try: [] + ()
139 except TypeError: pass
141 r(ValueError)
142 try: x = chr(10000)
143 except ValueError: pass
145 r(ZeroDivisionError)
146 try: x = 1/0
147 except ZeroDivisionError: pass
149 r(Exception)
150 try: x = 1/0
151 except Exception, e: pass
153 unlink(TESTFN)