code: def bitpos(self, key, bit, start=None, end=None):
          
          if bit not in (0, 1):
              raise DataError('bit must be 0 or 1')
          params = [key, bit]
  
          start is not None and params.append(start)
  
          if start is not None and end is not None:
              params.append(end)
          elif start is None and end is not None:
              raise DataError("start argument is not set, "
                              "when end is specified")
          return self.execute_command('BITPOS', *params)
docs: Return the position of the first bit set to 1 or 0 in a string.
          ``start`` and ``end`` difines search range. The range is interpreted
          as a range of bytes and not a range of bits, so start=0 and end=2
          means to look at the first three bytes.