Don't raise SystemError it's not for you.

From http://docs.python.org/2/library/exceptions.html#exceptions.SystemError

"Raised when the interpreter finds an internal error, but the
situation does not look so serious to cause it to abandon all hope.
The associated value is a string indicating what went wrong (in
low-level terms).

You should report this to the author or maintainer of your Python
interpreter. Be sure to report the version of the Python interpreter
(sys.version; it is also printed at the start of an interactive
Python session), the exact error message (the exception’s associated
value) and if possible the source of the program that triggered the
error."

ValueError still doesn't feel quite right, but it's definitely an improvement.  Suggestions welcome.