def _parse_fwf_line(line=None, offsets=None, padding_char=" "):
    """Takes string/line formatted as an fwf with given offsets and given padding char,
    parses it and return a row (list) with each column as an item

    Args:
        line (str, optional): fwf line to be parsed. Defaults to None.
        offsets (list[int], optional): length of each field in the fwf line. Defaults to None.
        padding_char (str, optional): padding character used in fwf. Defaults to " ".

    Raises:
        TypeError: if the line is not a string
        TypeError: if offsets are not a list
        ValueError: if lines are not the same length as offsets

    Returns:
        row[list[str]]: list of strings with each of them being the value in column
    """
    if not isinstance(line, str):
        raise TypeError(f"line should be a string")
    if not isinstance(offsets, list):
        raise TypeError(f"offsets should be a list")
    if not line:
        # NOTE Returns an empty list if the line is empty
        # empty rows should alteast have padding characters
        return []
    if len(line) != sum(offsets):
        raise ValueError("Lines should be of same length as sum of offsets")
    # NOTE if a line ends with padding character,
    # then it is considered as padding character and removed
    row = []
    idx_at = 0
    for col_offset in offsets:
        row.append(
            line[idx_at : int(col_offset) + idx_at].rstrip(padding_char)  # noqa: E203 \
        )
        idx_at += int(col_offset)
    return row