diff --git a/nbt/nbt.py b/nbt/nbt.py
index <HASH>..<HASH> 100644
--- a/nbt/nbt.py
+++ b/nbt/nbt.py
@@ -445,11 +445,12 @@ class TAG_Compound(TAG, MutableMapping):
             else:
                 name = TAG_String(buffer=buffer).value
                 try:
-                    tag = TAGLIST[type.value](buffer=buffer, name=name)
-                    tag.name = name
-                    self.tags.append(tag)
+                    tag = TAGLIST[type.value]()
                 except KeyError:
                     raise ValueError("Unrecognised tag type")
+                tag.name = name
+                self.tags.append(tag)
+                tag._parse_buffer(buffer)
 
     def _render_buffer(self, buffer):
         for tag in self.tags:
Make NBT more robust.
If an exception occurs, the part that parsed correctly up till the error is still preserved.
This allows easier recovery of corrupt files.
E.g.:
try:
  my_nbt = NBTFile()
  my_nbt.parse_file(buffer = fileobj)
except Exception:
  ....
print(my_nbt.pretty_tree())