Retrofit 2 tratamento de erros de chamada síncrona para erros 4xx

Estou usando uma fila de tarefas com prioridade no Android e uso o retrofit para fazer chamadas síncronas para a minha API de repouso, mas não tenho certeza de como lidar com erros como os 401 Erros não autorizados, que eu envio de volta, informando o erro. Simples ao fazer chamadas assíncronas, mas estou adaptando meu aplicativo ao gerenciador de tarefas. abaixo está uma tentativa simples de capturar exceções de E / S, mas as 401's 422's etc? Como fazer isso?

try {
    PostService postService = ServiceGenerator.createService(PostService.class);
    final Call<Post> call = postService.addPost(post);
    Post newPost = call.execute().body();

    // omitted code here

} catch (IOException e) {
    // handle error
}

EDITAR

O uso do objeto de resposta de retromontagem foi o argumento decisivo para mim; o retorno do objeto de resposta de retromontagem me permitiu

Response<Post> response = call.execute();

if (response.isSuccessful()) {
    // request successful (status code 200, 201)
    Post result = response.body();

    // publish the post added event
    EventBus.getDefault().post(new PostAddedEvent(result));
} else {
    // request not successful (like 400,401,403 etc and 5xx)
    renderApiError(response);
}

questionAnswers(2)

yourAnswerToTheQuestion