if you do:
```python
def __init__(self, error_msg=None, error_code=400):
    super(TagError, self).__init__()
    self.error_msg = error_msg or self.__class__.__name__
    self.error_code = error_code
```

you can remove `__init__` from all the subclasses where nothing is done beside setting a different `error_msg`.