Pergunta

Ao escrever o código que gera a exceção perguntei sobre aqui , cheguei ao fim da minha mensagem, e parou na pontuação. Eu percebi que quase todos os mensagem de exceção que eu já jogado, provavelmente, tem um! em algum lugar.

throw new InvalidOperationException("I'm not configured correctly!");
throw new ArgumentNullException("You passed a null!");
throw new StupidUserException("You can't divide by 0!  What the hell were you THINKING???  DUMMY!!!!!");

Que tom você toma ao escrever mensagens de exceção? Ao passar por registros, você encontra qualquer determinado estilo de mensagem realmente ajuda mais do que outro?

Foi útil?

Solução

Um tom de conversa em mensagens do sistema faz com que o olhar software profissional e desleixado. pontos de exclamação, insultos, e gírias realmente não tenho um lugar em mensagens de exceção polidas.

Além disso, eu tendem a usar diferentes estilos em Java para exceções de tempo de execução e exceções verificadas, uma vez que as exceções de tempo de execução são dirigidas para o programador que cometeu o erro. Desde exceções de tempo de execução pode ser exibido para usuários finais, eu ainda "mantê-lo limpo," mas eles podem ser um pouco mais concisa e enigmática. mensagens de exceção verificada deve ser mais útil, pois pode ser que o usuário pode corrigir o problema se você descrevê-lo (por exemplo, arquivo não encontrado, disco cheio, nenhuma rota para host, etc.).

Uma coisa que é útil, na ausência de um campo específico na exceção para as informações, são os dados ofensivos:

throw new IndexOutOfBoundsException("offset < 0: " + off);

Outras dicas

Basta ser questão de fato. Incluir todas as informações é provável que você precisa quando depuração, mas não mais do que isso.

A única vez que eu ia incluir um ponto de exclamação em uma mensagem de exceção é se isso indica que algo muito, muito bizarro aconteceu. A maioria dos erros não são realmente bizarro, apenas o produto de um ambiente incorreta, erro do usuário ou um erro de programação simples.

Eu tento para espelhar o estilo de tom, gramática e pontuação do quadro contra o qual eu estou codificação. Você nunca sabe quando uma destas mensagens pode realmente fazê-lo para fora na frente de um cliente ou usuário, então eu manter tudo profissional não-julgamento e específico o suficiente, para a solução de problemas - sem ser tão específico quanto ao dar quaisquer problemas de segurança no código.

I evitar pontos de exclamação em todas as cadeias (UI e exceção), como a peste, exceto (ocasionalmente) em meus testes de unidade.

Assumindo a responsabilidade, mesmo quando ele realmente foi culpa do usuário, é a melhor opção que eu vi.

As coisas ao longo das linhas de "Eu não posso encontrar o arquivo que você queria, você verificar para ver que eu tê-lo corretamente?" ou "Algo deu errado. Não sei o que, mas a única maneira que eu possa ficar fixo é por parar. Por favor, reinicie mim."

Concise, detalhada e pouca informação redundante (ou seja ArgumentNullException obviamente envolveu um nulo).

Mas aqui está a melhor i já leu por um tempo, primeira resposta a este .

Eu não usaria marcas de exclamação demais. Eles expressam muito, pensar sobre o fato de que "Nenhum disco na unidade!" pode ser lido como "Nenhum disco na unidade que você usuário louco." ;)

Eu acho que é sábio para lançar exceções que contêm texto internacionalizado. Você nunca sabe quem vai usar o seu código, pegar sua exceção e exibir o texto para o usuário. De modo que seria:

throw new MagicalException(getText("magical.exception.text"));

Eu também recomendo envolvendo a exceção subjacente (se tiver) quando jogá-lo. Isso realmente ajuda a depuração.

Não pense que as exceções de tempo de execução não será visto pelo usuário. Se você está entrando em um arquivo appender algum usuário curioso pode apenas abrir o registo e espreitar em sua sujo segredos.

I encontrar o mais mensagens votos fornecer:

  • A formato consistente que torna mais fácil para entender o que eles estão dizendo.
  • A carimbo de tempo, para que você possa ter uma idéia para a dinâmica do seu programa.
  • A resumo conciso do erro. Se você fornecer suporte técnico, adicionar um código de erro para rápida identificação.
  • Uma explicação sobre o que deu errado, diferenciar entre um entrada do usuário inválido e erro de codificação.
  • Informação detalhada , incluindo o linha de código ou valores envolvidos.

E o mais importante:

  • Eles dizer ao usuário como corrigir o problema.

Exemplo:

Error 203 (Timeout) in commit.c line 42:
Unable to save salary data for user 'Linus' to database at '10.10.1.21'
after 1500ms.  Verify database address and login credentials.

Uma das lições mais difíceis de aprender é que os usuários são muito menos interessado nas partes internas do seu código do que eles estão em se seus trabalhos. Torná-lo tão fácil quanto possível para que eles façam seus empregos, e você adicionou um enorme valor para o seu software.

I tendem a trabalhar minhas mensagens de exceção para o si exceção. Por exemplo. um FILE_NOT_FOUND deve dizer "arquivo não encontrado". dados específicos só devem ser incluídas se o usuário não pode descobrir isso; neste caso, o usuário sabe o nome do arquivo, então eu não adicionar esses dados. A formatação pode ser feito por qualquer gera as informações, se necessário, então eu tento torná-los tão amigável para reformatar possível.

Polite, concisa, simples, específico. Muitas vezes, incluindo valores de estado na mensagem é útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top