##
3.21.1 Interactive Interpreter Objects

`runsource` (source[, filename[, symbol]])
  Compile and run some source in the interpreter. Arguments are the same as for `compile_command()`; the default for filename is `'<input>'`, and for symbol is `'single'`. One several things can happen:

  - The input is incorrect; `compile_command()` raised an exception (`SyntaxError` or `OverflowError`). A syntax traceback will be printed by calling the `showsyntaxerror()` method. `runsource()` returns `0`.

  - The input is incomplete, and more input is required; `compile_command()` returned `None`. `runsource()` returns `1`.

  - The input is complete; `compile_command()` returned a code object. The code is executed by calling the `runcode()` (which also handles run-time exceptions, except for `SystemExit`). `runsource()` returns `0`.

  The return value can be used to decide whether to use `sys.ps1` or `sys.ps2` to prompt the next line.

`runcode` (code)
  Execute a code object. When an exception occurs, `showtraceback()` is called to display a traceback. All exceptions are caught except `SystemExit`, which is allowed to propogate.

  A note about `KeyboardInterrupt`: this exception may occur elsewhere in this code, and may not always be caught. The caller should be prepared to deal with it.

`showsyntaxerror` ([filename])
  Display the syntax error that just occurred. This does not display a stack trace because there isn't one for syntax errors. If filename is given, it is stuffed into the exception instead of the default filename provided by Python's parser, because it always uses `'<string>'` when reading from a string. The output is written by the `write()` method.

`showtraceback` ()
  Display the exception that just occurred. We remove the first stack item because it is within the interpreter object implementation. The output is written by the `write()` method.

`write` (data)
  Write a string to standard output. Derived classes should override this to provide the appropriate output handling as needed.