Here's a weird one for you. Instead of checking for access, I often see code that just tries the access (supposedly avoids a very small chance of a security/timing issue). not quite as pretty as what you have, however:

        for stat in STATS:
            path = "/sys/devices/virtual/block/{0}/bcache/stats_total/{1}".format(DEFAULT_DEVICE, stat)
            try:
                fp = open(path)
            except IOError:
                pass
            else:
                line = fp.readline()
                result[stat] = int(line)
                fp.close()

They should be functionally the same (I didn't test mine), so please don't consider this a 'must change' item.