| # 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 test_raise_catch(exc): |
| try: |
| raise exc, "spam" |
| except exc, err: |
| buf = str(err) |
| try: |
| raise exc("spam") |
| except exc, err: |
| buf = str(err) |
| print buf |
| |
| def r(thing): |
| test_raise_catch(thing) |
| if isinstance(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(IndentationError) |
| |
| r(TabError) |
| # can only be tested under -tt, and is the only test for -tt |
| #try: compile("try:\n\t1/0\n \t1/0\nfinally:\n pass\n", '<string>', 'exec') |
| #except TabError: pass |
| #else: raise TestFailed |
| |
| 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 |
| |
| r(Exception) |
| try: x = 1/0 |
| except Exception, e: pass |
| |
| unlink(TESTFN) |