def _read(self, last_pass=False):

        def mcs2sec(val):
            return int(int(val) / 1000.0) / 1000.0

        if self.stats_reader:
            self.stats_reader.read_file(last_pass)

        if not self.csvreader and not self.__open_fds():
            self.log.debug("No data to start reading yet")
            return

        self.log.debug("Reading: %s", self.filename)
        self.fds.seek(self.offset)  # not only Mac has this issue, DictReader on Linux also suffers from it
        for row in self.csvreader:
            label = row["label"]

            rtm = mcs2sec(row["elapsed"])
            ltc = mcs2sec(row["Latency"])
            cnn = mcs2sec(row["Connect"])
            # NOTE: actually we have precise send and receive time here...

            if row["opretcode"] != "0":
                error = strerror(int(row["opretcode"]))
                rcd = error
            else:
                error = None
                rcd = row["responseCode"]

            tstmp = int(float(row["timeStamp"]) + rtm)
            concur = 0
            yield tstmp, label, concur, rtm, cnn, ltc, rcd, error, ''

        self.offset = self.fds.tell()
Allows you to ignore exceptions cleanly using context managers. This
dataset/ETHPy150Open Blazemeter/taurus/bzt/modules/pbench.py/PBenchKPIReader._read--crossover with--dataset/ETHPy150Open STIXProject/python-stix/stix/utils/__init__.py/ignored