Какой стиль вы используете для сообщений об исключениях?[закрыто]

StackOverflow https://stackoverflow.com/questions/259887

Вопрос

При написании кода, который выдает исключение, о котором я спрашивал здесь, я дошёл до конца своего сообщения и остановился на знаках препинания.Я понял, что почти каждое сообщение об исключении, которое я когда-либо выдавал, вероятно, имеет !где-то.

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!!!!!");

Какой тон вы используете, когда пишете сообщения об исключениях?Просматривая журналы, обнаруживаете ли вы, что какой-либо определенный стиль сообщений действительно помогает больше, чем другой?

Это было полезно?

Решение

Разговор в системных сообщениях делает программное обеспечение непрофессиональным и небрежным. Восклицательные знаки, оскорбления и жаргон не имеют места в полированных сообщениях об исключениях.

Кроме того, я склонен использовать разные стили в Java для исключений времени выполнения и проверенных исключений, поскольку исключения времени выполнения адресованы программисту, который допустил ошибку. Поскольку конечные пользователи могут отображать исключения во время выполнения, я по-прежнему " сохраняю их чистыми " но они могут быть немного более краткими и загадочными. Проверенные сообщения об исключениях должны быть более полезными, поскольку может случиться так, что пользователь сможет решить проблему, если вы ее опишите (например, файл не найден, диск заполнен, нет маршрута к хосту и т. Д.).

Одна вещь, которая полезна, при отсутствии определенного поля в исключении для информации, это оскорбительные данные:

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

Другие советы

Просто будь фактом. Включите всю информацию, которая вам может понадобиться при отладке, но не более того.

Единственный раз, когда я включаю восклицательный знак в сообщение об исключении, это если он указывает на то, что что-то действительно странное произошло. Большинство ошибок не являются действительно странными, просто являются результатом неправильной среды, пользовательской ошибки или простой ошибки программирования.

Я пытаюсь отразить тон, грамматику и стиль пунктуации структуры, против которой я кодирую. Вы никогда не знаете, когда одно из этих сообщений действительно может быть разобрано перед клиентом или пользователем, поэтому я сохраняю все профессионально, без суждений и достаточно конкретно для устранения неполадок - не будучи настолько конкретным, чтобы выдавать какие-либо проблемы безопасности в код.

Я избегаю восклицательных знаков во всех строках (пользовательский интерфейс и исключения), таких как чума, за исключением (иногда) в моих модульных тестах.

Взятие ответственности, даже если это действительно была ошибка пользователя, - лучший вариант, который я видел.

Что-то вроде "Я не могу найти файл, который вы хотели, не могли бы вы проверить, правильно ли он у меня?" или "Что-то пошло не так. Не знаю, что, но единственный способ исправить это - остановиться. Пожалуйста, перезапустите меня. & Quot;

Краткая, подробная и мало избыточная информация (т. е. ArgumentNullException явно содержит ноль).

Но вот лучшее из того, что я читал на некоторое время, первый ответ на

Я бы не стал слишком часто использовать восклицательные знаки. Они слишком много выражают, думают о том, что «диска нет в приводе!» может читаться как "Нет диска в приводе, вы сумасшедший пользователь." ;)

Я думаю, что было бы целесообразно создавать исключения, содержащие интернационализированный текст. Вы никогда не знаете, кто будет использовать ваш код, поймаете ваше исключение и отобразите текст пользователю. Так что будет:

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

Я также рекомендую обернуть основное исключение (если оно есть) при его создании. Это действительно помогает при отладке.

Не думайте, что исключения во время выполнения не будут видны пользователю. Если вы входите в файловый аппендиат, какой-нибудь любопытный пользователь может просто открыть журнал и заглянуть в свои грязные секреты.

Я считаю, что наиболее полезные сообщения содержат:

  • А последовательный формат это позволяет легко понять, что они вам говорят.
  • А отметка времени, чтобы вы могли почувствовать динамику вашей программы.
  • А краткое изложение ошибки.Если вы предоставляете техническую поддержку, добавьте код ошибки для быстрой идентификации.
  • Ан объяснение того, что пошло не так, различие между неверный ввод пользователя и ошибка кодирования.
  • Подробная информация, в том числе строка кода или ценности вовлеченный.

И самое важное:

  • Они сообщают пользователю, как решить проблему.

Пример:

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.

Один из самых трудных уроков, который нужно усвоить, заключается в том, что ваши пользователи гораздо меньше интересуются внутренней частью вашего кода, чем выполняют свою работу. Сделайте так, чтобы им было как можно проще выполнять свою работу, и вы повысите ценность своего программного обеспечения.

Я склонен превращать свои сообщения об исключениях в сами исключения. Например. file_not_found должен сказать «файл не найден». Конкретные данные должны быть включены, только если пользователь не может понять это; в этом случае пользователь знает имя файла, поэтому я не добавляю эти данные. Форматирование может быть выполнено любым выводом информации, если это необходимо, поэтому я стараюсь сделать их максимально удобными для переформатирования.

Вежливый, лаконичный, простой, конкретный. Часто полезно включать значения состояния в сообщение.

scroll top