<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def put_field(self, path, name, value):
 """ Creates a field with the specified name an value at path. If the field already exists, it will be overwritten with the new value. :param path: str or Path instance :param name: :type name: str :param value: :type value: str """

        if not isinstance(value, str):
            raise ValueError()
        path = make_path(path)
        container = self.get_container(path)
        current = self._values.get(name)
        if current is not None and isinstance(current, ValueTree):
            raise TypeError()
        container._values[name] = value