<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def guarded(self, call, *args):
 """ Catch exceptions thrown by filesystem calls, and don't really execute them in dry-run mode. """

        self.LOG.debug('%s(%s)' % (
            call.__name__, ', '.join([pretty_path(i) for i in args]),
        ))
        if not self.options.dry_run:
            try:
                call(*args)
            except (EnvironmentError, UnicodeError) as exc:
                self.fatal('%s(%s) failed [%s]' % (
                    call.__name__, ', '.join([pretty_path(i) for i in args]), exc,
                ))