code: def attrgetrow(self, groupname, key, value=None):
          
          if not isinstance(key, str):
              return self._attrgetrow(groupname, key)
          # The key is an attribute name whose value has to be found.
          rownrs = self.attrfindrows(groupname, key, value)
          if len(rownrs) == 0:
              raise IndexError("Image attribute " + key + " in group " +
                               groupname + " has no matches for value " +
                               str(value))
          if len(rownrs) > 1:
              raise IndexError("Image attribute " + key + " in group " +
                               groupname + " has multiple matches for value " +
                               str(value))
          return self._attrgetrow(groupname, rownrs[0])
docs: Get the values of all attributes of a row in a group.
  
          If the key is an integer, the key is the row number for which
          the attribute values have to be returned.
  
          Otherwise the key has to be a string and it defines the name of an
          attribute. The attribute values of the row for which the key matches
          the given value is returned.
          It can only be used for unique attribute keys. An IndexError exception
          is raised if no or multiple matches are found.