(func, path, exc_info)
On Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.
On Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.
On Windows the files in . svn are read - only so when rmtree () tries to remove them an exception is thrown . We catch that here remove the read - only attribute and hopefully continue without problems .
def rmtree_errorhandler(func, path, exc_info):
    """On Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems."""
    # if file type currently read only
    if os.stat(path).st_mode & stat.S_IREAD:
        # convert to read/write
        os.chmod(path, stat.S_IWRITE)
        # use the original function to repeat the operation
        func(path)
        return
    else:
        raise
def rmtree_errorhandler ( func , path , exc_info ) : # if file type currently read only if os . stat ( path ) . st_mode & stat . S_IREAD : # convert to read/write os . chmod ( path , stat . S_IWRITE ) # use the original function to repeat the operation func ( path ) return else : raise