System Errors
=============

System Errors are errors representing a system failure.  At the
application level, they are errors that are uncaught by the
application and that a developer hasn't provided a custom error view
for.

Zope provides a default system error view that prints an obnoxius
terse message and that sets the response status.

To see an example of this, we'll create a ZPT page with an intentional
error:

  >>> print http(r"""
  ... POST /+/zope.app.zptpage.ZPTPage%3D HTTP/1.1
  ... Authorization: Basic mgr:mgrpw
  ... Content-Length: 739
  ... Content-Type: multipart/form-data; boundary=---------------------------125598457818223697821067764270
  ... Referer: http://localhost:8081/+/zope.app.zptpage.ZPTPage=
  ...
  ... -----------------------------125598457818223697821067764270
  ... Content-Disposition: form-data; name="field.source"
  ...
  ... <html><body tal:content="container/eek" /></html>
  ... -----------------------------125598457818223697821067764270
  ... Content-Disposition: form-data; name="field.expand.used"
  ...
  ...
  ... -----------------------------125598457818223697821067764270
  ... Content-Disposition: form-data; name="field.evaluateInlineCode.used"
  ...
  ...
  ... -----------------------------125598457818223697821067764270
  ... Content-Disposition: form-data; name="UPDATE_SUBMIT"
  ...
  ... Add
  ... -----------------------------125598457818223697821067764270
  ... Content-Disposition: form-data; name="add_input_name"
  ...
  ... test.html
  ... -----------------------------125598457818223697821067764270--
  ... """)
  HTTP/1.1 303 See Other
  ...
  Location: http://localhost/@@contents.html
  ...

When we visit it, we get a terse error and a 500 status:

We get a system error, because the problem is in the template, not in
the URL:

  >>> print http(r"""
  ... GET /test.html HTTP/1.1
  ... """)
  HTTP/1.1 500 Internal Server Error
  ...
    A system error occurred.
  ...

Another way of getting a system error is the occurrence of a system
error, such as ``ComponentLookupError``. I have registered a simple
view in ``exception-ftesting.zcml`` that will raise a component lookup
error. So if we call ``componentlookuperror.html``, we should get the
error message:

  >>> print http(r"""
  ... GET /componentlookuperror.html HTTP/1.1
  ... """)
  HTTP/1.1 500 Internal Server Error
  ...
    A system error occurred.
  ...
