old_contents: # 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
  
  r(Exception)
  try: x = 1/0
  except Exception, e: pass
  
  unlink(TESTFN)
  
new_contents: # 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 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
  
  r(Exception)
  try: x = 1/0
  except Exception, e: pass
  
  unlink(TESTFN)
  
subject: add minimal test of exception use. verify that each exception can be raised, caught, and converted to a string.