Following the suggestion of @filbranden you could do:
```
function! Rename(old_path, new_path) abort
  let c=&confirm
  set noconfirm
  try
    execute "saveas" fnameescape(a:new_path)
  catch /File exists/
    echo 'fail to rename to: ' . fnameescape(a:new_path)
    return
  finally
    let &confirm = c
  endtry
  call delete(a:old_path)
endfunction
```

Remark: I propose to temporarily disable the `noconfirm` option such that the exception is raised.