docs: def validate_rows(self):
          """
          :raises ValueError:
          """
  
          invalid_row_idx_list = []
  
          for row_idx, row in enumerate(self.rows):
              if isinstance(row, (list, tuple)) and len(self.headers) != len(row):
                  invalid_row_idx_list.append(row_idx)
  
              if isinstance(row, dict):
                  if not all([header in row for header in self.headers]):
                      invalid_row_idx_list.append(row_idx)
  
          if not invalid_row_idx_list:
              return
  
          for invalid_row_idx in invalid_row_idx_list:
              logger.debug(
                  "invalid row (line={}): {}".format(invalid_row_idx, self.rows[invalid_row_idx])
              )
  
          raise ValueError(
              "table header length and row length are mismatch:\n"
              + "  header(len={}): {}\n".format(len(self.headers), self.headers)
              + "  # of miss match rows: {} ouf of {}\n".format(
                  len(invalid_row_idx_list), self.num_rows
              )
          )