Construct a generator that yields file instances.

    :param sources: One or more strings representing path to file(s).

def read_files(*sources, **kwds):
    """Construct a generator that yields file instances.

    :param sources: One or more strings representing path to file(s).
    """
    filenames = _generate_filenames(sources)
    filehandles = _generate_handles(filenames)
    for fh, source in filehandles:
        try:
            f = mwtab.MWTabFile(source)
            f.read(fh)

            if kwds.get('validate'):
                validator.validate_file(mwtabfile=f,
                                        section_schema_mapping=mwschema.section_schema_mapping,
                                        validate_samples=True,
                                        validate_factors=True)
            yield f

            if VERBOSE:
                print("Processed file: {}".format(os.path.abspath(source)))

        except Exception as e:
            if VERBOSE:
                print("Error processing file: ", os.path.abspath(source), "\nReason:", e)
            pass