 KeyError

We wrap the original exception to give the calling application
access to the test and example information.

If the output doesn't match, then a DocTestFailure is raised:

  >>> test = DocTestParser().get_doctest('''
  ...      >>> x = 1
  ...      >>> x
  ...      2
  ...      ''', {}, 'foo', 'foo.py', 0)

  >>> try:
  ...    runner.run(test)
  ... except DocTestFailure as f:
  ...    failure = f

DocTestFailure objects provide access to the test:

  >>> failure.test is test
  True

As well as to the example:

  >>> failure.example.want
  '2\n'

and the actual output:

  >>> failure.got
  '1\n'

If a failure or error occurs, the globals are left intact:

  >>> del test.globs['__builtins__']
  >>> test.globs
  {'x': 1}

  >>> test = DocTestParser().get_doctest('''
  ...      >>> x = 2
  ...      >>> raise KeyError
  ...      ''', {}, 'foo', 'foo.py', 0)

  >>> runner.run(test)
  Traceback (most recent call last):
  ...
  doctest.UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>

  >>> del test.globs['__builtins__']
  >>> test.globs
  {'x': 2}

But the globals are cleared if there is no error:

  >>> test = DocTestParser().get_doctest('''
  ...      >>> x = 2
  ...      ''', {}, 'foo', 'foo.py', 0)

  >>> runner.run(test)
  TestResults(failed=0, attempted=1)

  >>> test.globs
  {}

Nc