<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create(self, task_name, clone_task=None):
 """ Creates a new task directory. `task_name` Task name. `clone_task` Existing task name to use as a template for new task. Returns boolean. * Raises ``Value`` if task name is invalid, ``TaskExists`` if task already exists, or ``TaskNotFound`` if task for `clone_from` doesn't exist. """


        if not task_name or task_name.startswith('-'):
            raise ValueError('Invalid task name')

        try:
            task_dir = self._get_task_dir(task_name)

            if self.exists(task_dir):
                raise errors.TaskExists(task_name)

            task_cfg = self.get_config_path(task_name)

            if clone_task:
                if not self.exists(clone_task):
                    raise errors.TaskNotFound(clone_task)

                # copy task directory
                shutil.copytree(self._get_task_dir(clone_task), task_dir)

            else:
                os.mkdir(task_dir)

                # write default task configuration
                shutil.copy(self._default_task_config, task_cfg)

            return True

        except OSError:
            shutil.rmtree(task_dir, ignore_errors=True)
            return False