code: def BEDIterator(filehandle, sortedby=None, verbose=False, scoreType=int,
                  dropAfter=None):
    chromsSeen = set()
    prev = None
    if type(filehandle).__name__ == "str":
      filehandle = open(filehandle)
    if verbose:
      try:
        pind = ProgressIndicator(totalToDo=os.path.getsize(filehandle.name),
                                 messagePrefix="completed",
                                 messageSuffix="of processing " +
                                               filehandle.name)
      except (AttributeError, OSError) as e:
        sys.stderr.write("BEDIterator -- warning: " +
                         "unable to show progress for stream")
        verbose = False
    for line in filehandle:
      if verbose:
        pind.done = filehandle.tell()
        pind.showProgress()
      if line.strip() == "":
        continue
      try:
        e = parseBEDString(line, scoreType, dropAfter=dropAfter)
      except GenomicIntervalError as e:
        raise BEDError(str(e) + " on line " + line)
      if ((sortedby == ITERATOR_SORTED_NAME and prev is not None) and
         (prev.name > e.name)):
        raise BEDError("bed file " + filehandle.name +
                       " not sorted by element name" +
                       " found " + e.name + " after " +
                       prev.name)
      if prev is None:
        chromsSeen.add(e.chrom)
      if prev is not None and sortedby is not None and e.chrom == prev.chrom:
        if sortedby == ITERATOR_SORTED_START and prev.start > e.start:
          raise BEDError("bed file " + filehandle.name +
                         " not sorted by start index - saw item " +
                         str(prev) + " before " + str(e))
        if sortedby == ITERATOR_SORTED_END and prev.end > e.end:
          raise BEDError("bed file " + filehandle.name +
                         " not sorted by end index - saw item " +
                         str(prev) + " before " + str(e))
      if prev is not None and prev.chrom != e.chrom:
        if (sortedby == ITERATOR_SORTED_START or
            sortedby == ITERATOR_SORTED_END or
            sortedby == ITERATOR_SORTED_CHROM) and\
           (e.chrom in chromsSeen or prev.chrom > e.chrom):
          try:
            e_fn = filehandle.name
          except AttributeError:
            e_fn = "UNNAMED STREAM"
          raise BEDError("BED file " + e_fn + " not sorted by chrom")
        chromsSeen.add(e.chrom)
      yield e
      prev = e