SystemExit seems harsh here; why not just ValueError?