# Python test set -- part 5, built-in exceptions | |
from test_support import * | |
from types import ClassType | |
print '5. Built-in exceptions' | |
# XXX This is not really enough, each *operation* should be tested! | |
def r(thing): | |
if type(thing) == ClassType: | |
print thing.__name__ | |
else: | |
print thing | |
r(AttributeError) | |
import sys | |
try: x = sys.undefined_attribute | |
except AttributeError: pass | |
r(EOFError) | |
import sys | |
fp = open(TESTFN, 'w') | |
fp.close() | |
fp = open(TESTFN, 'r') | |
savestdin = sys.stdin | |
try: | |
try: | |
sys.stdin = fp | |
x = raw_input() | |
except EOFError: | |
pass | |
finally: | |
sys.stdin = savestdin | |
fp.close() | |
r(IOError) | |
try: open('this file does not exist', 'r') | |
except IOError: pass | |
r(ImportError) | |
try: import undefined_module | |
except ImportError: pass | |
r(IndexError) | |
x = [] | |
try: a = x[10] | |
except IndexError: pass | |
r(KeyError) | |
x = {} | |
try: a = x['key'] | |
except KeyError: pass | |
r(KeyboardInterrupt) | |
print '(not testable in a script)' | |
r(MemoryError) | |
print '(not safe to test)' | |
r(NameError) | |
try: x = undefined_variable | |
except NameError: pass | |
r(OverflowError) | |
x = 1 | |
try: | |
while 1: x = x+x | |
except OverflowError: pass | |
r(RuntimeError) | |
print '(not used any more?)' | |
r(SyntaxError) | |
try: exec '/\n' | |
except SyntaxError: pass | |
r(SystemError) | |
print '(hard to reproduce)' | |
r(SystemExit) | |
import sys | |
try: sys.exit(0) | |
except SystemExit: pass | |
r(TypeError) | |
try: [] + () | |
except TypeError: pass | |
r(ValueError) | |
try: x = chr(10000) | |
except ValueError: pass | |
r(ZeroDivisionError) | |
try: x = 1/0 | |
except ZeroDivisionError: pass | |
unlink(TESTFN) |