For this kind of thing it's fine to just use default kwargs in the `__init__` like:

```
def __init__(self, *args, best_solution=None, accuracy=None, ...):
```

and so on.  So long as the `**kwargs` aren't passed on to `super(NoConvergence, self).__init__(*args)` it's fine for your `Exception` subclass to take explicit keyword arguments.