def get_dict_path(obj, path):
    """Traverse a dict using a / seperated string.

    Args:
        obj (:obj:`dict`):
            Dictionary to traverse using path.
        path (:obj:`str`):
            Nested dictionary keys seperated by / to traverse in obj.

    Raises:
        :exc:`ValueError`:
            If a part of a path can not be found.

    Returns:
        :obj:`object`

    """
    value = obj
    parts = path.strip("/").split("/")
    for idx, key in enumerate(parts):
        try:
            value = value[key]
        except Exception:
            current_parts = parts[:idx]
            current_path = "/".join(current_parts)
            if isinstance(value, dict):
                valid_keys = list(value.keys())
            else:
                value_type = type(value).__name__
                valid_keys = "NONE: key {k!r} is {t}, not dict."
                valid_keys = valid_keys.format(k=current_parts[-1], t=value_type)
            error = [
                "Unable to find key {k!r} in path {p!r}",
                "Valid keys at {c!r}:",
                "{v!r}",
            ]
            error = "\n  ".join(error)
            error = error.format(k=key, p=path, c=current_path, v=valid_keys)
            raise ValueError(error)
    return value