code: def __delitem__(self, key):
      if self._readonly:
          raise error("The database is opened for reading only")
      if isinstance(key, str):
          key = key.encode("utf-8")
      self._verify_open()
      self._modified = True
      # The blocks used by the associated value are lost.
      del self._index[key]
      # XXX It's unclear why we do a _commit() here (the code always
      # XXX has, so I'm not changing it).  __setitem__ doesn't try to
      # XXX keep the directory file in synch.  Why should we?  Or
      # XXX why shouldn't __setitem__?
      self._commit()
  
imports: import ast
  import io
  import os
  import collections.abc
label_desc: Use image node_id 11 for calling the _Database obj's underlying member method code with example usage: obj.__delitem__(key) without return types