# Buggy code
def parse_header(self):
    self.dm_version = iou.read_long(self.f, "big")
    if self.dm_version not in (3, 4):
        raise NotImplementedError(
            "Currently we only support reading DM versions 3 and 4 but "
            "this file "
            "seems to be version %s " % self.dm_version
        )
    self.skipif4()
    filesizeB = iou.read_long(self.f, "big")
    is_little_endian = iou.read_long(self.f, "big")

    _logger.info("DM version: %i", self.dm_version)
    _logger.info("size %i B", filesizeB)
    _logger.info("Is file Little endian? %s", bool(is_little_endian))
    if bool(is_little_endian):
        self.endian = "little"
    else:
        self.endian = "big"


# Traceback (DM3TagIDError)
ss = hs.load('D:\\Vadim\\2018-08-02_STEM-d_C_fiber_Fengshan\\bin2\\02_0V.dm4')

---------------------------------------------------------------------------
DM3TagIDError                             Traceback (most recent call last)
<ipython-input-20-bfa902970b32> in <module>()
----> 1 ss = hs.load('D:\\Vadim\\2018-08-02_STEM-d_C_fiber_Fengshan\\bin2\\02_0V.dm4')

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load(filenames, signal_type, stack, stack_axis, new_axis_name, lazy, **kwds)
241             objects = [load_single_file(filename, lazy=lazy,
242                                         **kwds)
--> 243                        for filename in filenames]
244
245         if len(objects) == 1:

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in <listcomp>(.0)
241             objects = [load_single_file(filename, lazy=lazy,
242                                         **kwds)
--> 243                        for filename in filenames]
244
245         if len(objects) == 1:

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load_single_file(filename, signal_type, **kwds)
284                                 reader=reader,
285                                 signal_type=signal_type,
--> 286                                 **kwds)
287
288

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io.py in load_with_reader(filename, reader, signal_type, **kwds)
293     lazy = kwds.get('lazy', False)
294     file_data_list = reader.file_reader(filename,
--> 295                                         **kwds)
296     objects = []
297

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in file_reader(filename, record_by, order, lazy)
986     with open(filename, "rb") as f:
987         dm = DigitalMicrographReader(f)
--> 988         dm.parse_file()
989         images = [ImageObject(imdict, f, order=order, record_by=record_by)
990                   for imdict in dm.get_image_dictionaries()]

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_file(self)
85             number_of_root_tags,
86             group_name="root",
---> 87             group_dict=self.tags_dict)
88
89     def parse_header(self):

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
219                     ntags=ntags,
220                     group_name=tag_name,
--> 221                     group_dict=group_dict[tag_name])
222             else:
223                 _logger.debug('File address:', self.f.tell())

C:\Users\migunov\AppData\Local\conda\conda\envs\hs\lib\site-packages\hyperspy\io_plugins\digital_micrograph.py in parse_tags(self, ntags, group_name, group_dict)
222             else:
223                 _logger.debug('File address:', self.f.tell())
--> 224                 raise DM3TagIDError(tag_header['tag_id'])
225
226     def get_data_reader(self, enc_dtype):

DM3TagIDError: 66

# Fixed code
def parse_header(self):
    self.dm_version = iou.read_long(self.f, "big")
    if self.dm_version not in (3, 4):
        raise NotImplementedError(
            "Currently we only support reading DM versions 3 and 4 but "
            "this file "
            "seems to be version %s " % self.dm_version
        )
    filesizeB = self.read_l_or_q(self.f, "big")
    is_little_endian = iou.read_long(self.f, "big")

    _logger.info("DM version: %i", self.dm_version)
    _logger.info("size %i B", filesizeB)
    _logger.info("Is file Little endian? %s", bool(is_little_endian))
    if bool(is_little_endian):
        self.endian = "little"
    else:
        self.endian = "big"