code: def read_gtf_line(cols, field="name"):
      
      field = field.lower()
      try:
          group = cols[2]
          attrs = cols[8].split(";")
          name = [attr.strip().split(" ")[1] for attr in attrs if attr.strip().split(" ")[0].lower().endswith(field)]
          if not name:
              name = [attr.strip().split(" ")[1] for attr in attrs if attr.strip().split(" ")[0].lower().endswith("gene_id")]
          if not name:
              name = ["None"]
          biotype = [attr.strip().split(" ")[1] for attr in attrs if attr.strip().split(" ")[0].lower().endswith("biotype")]
          if biotype:
              group = biotype[0]
          c = cols[0]
          s = int(cols[3])
          e = int(cols[4])
          st = cols[6]
          return [c, s, e, st, group, name[0]]
      except(Exception, e):
          logger.error(cols)
          logger.error("File is not in correct format")
          logger.error("Expect chr source feature start end . strand attributes")
          logger.error("Attributes are 'gene_name SNCA; gene_id ENSG; '")
          logger.error("The 3rd column is used as type of small RNA (like miRNA)")
          logger.error("at least should contains '; *name NAME; '")
          logger.error(e)
          raise
docs: parse gtf line to get class/name information