def _defitsify_slice(slices):
    """
    Convert a FITS-style slice specification into a python slice.

    This means two things:
    + Subtract 1 from starting index because in the FITS
      specification arrays are one-based.
    + Do **not** subtract 1 from the ending index because the python
      convention for a slice is for the last value to be one less than the
      stop value. In other words, this subtraction is already built into
      python.
    + Reverse the order of the slices, because the FITS specification dictates
      that the first axis is the one along which the index varies most rapidly
      (aka FORTRAN order).
    """
    python_slice = []
    for a_slice in slices[::-1]:
        new_start = a_slice.start - 1 if a_slice.start is not None else None
        if new_start is not None and new_start < 0:
            raise ValueError('Smallest permissible FITS index is 1')
        if a_slice.stop is not None and a_slice.stop < 0:
            raise ValueError('Negative final index not allowed for FITS slice')
        new_slice = slice(new_start, a_slice.stop, a_slice.step)
        if (a_slice.start is not None and a_slice.stop is not None and 
            a_slice.start > a_slice.stop):
            new_step = -1 if a_slice.step is None else -a_slice.step
            new_stop = None if a_slice.stop == 1 else a_slice.stop - 2
            new_slice = slice(new_start, new_stop, new_step)
        python_slice.append(new_slice)
    return python_slice
