See iter_open, but raises if multiple or no matches found.

def open(cls, **kwargs):
    """See iter_open, but raises if multiple or no matches found."""
    handle_iter = cls.iter_open(**kwargs)

    try:
      handle = six.next(handle_iter)
    except StopIteration:
      # No matching interface, raise.
      raise usb_exceptions.DeviceNotFoundError(
          'Open failed with args: %s', kwargs)

    try:
      multiple_handle = six.next(handle_iter)
    except StopIteration:
      # Exactly one matching device, return it.
      return handle

    # We have more than one device, close the ones we opened and bail.
    handle.close()
    multiple_handle.close()
    raise usb_exceptions.MultipleInterfacesFoundError(kwargs)