It's fine as it is and it's clear what the intention is, but consider this tweak:

```python
for b in self.buckets:
  if inputValue in bucket:
    assert b is not None
    bucket = b
    break
else:
  raise LookupError('Unable to find bucket')
```

a `LookupError` exception indicates that it wasn't found, while an `AssertError` exception indicates that it was found, but wasn't what you were looking for.  And by explicitly assigning `bucket` to `b`, you're avoiding re-using the for loop variable.

Regardless, I don't intend for this comment to be a blocker.