I think it would be nicer to move these constants into `BadInputError` itself, so that you can do:

```
raise BadInputError(BadInputError.CONFLICT, x, y)

# And then...

try:
    # do something
except BadInputError as e:
    if e.format_string == BadInputError.CONFLICT:
        # do stuff
    else:
        # do other stuff
```

This way, all symbols are under the `BadInputError` namespace.