при ошибке возможно ли игнорировать исключение? - PullRequest
2 голосов
/ 14 апреля 2010

как мне игнорировать исключения в c #?

Я читаю удаленный XML-файл, и иногда тег не существует, и он выдает исключение. как игнорировать исключение и перейти к следующему?

Ответы [ 7 ]

4 голосов
/ 14 апреля 2010

как мне игнорировать исключения в c #?

Не.

Исключения пытаются сообщить вам, что что-то не так с вашим кодом.

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


Если вы спрашиваете, как обработать конкретное исключение, вы можете заключить его в блок try-catch:

XmlDocument doc = new XmlDocument();
try
{
    doc.Load(url);
}
catch (XmlException)
{
    // Handle the error here
    return (default value);
}
// Start going through the XmlDocument

Приведенный выше код будет обрабатывать конкретный случай, когда XML искажен . Однако, если XML правильно сформирован, но ваш код выдает исключение, потому что конкретный элемент не существует, и вы предполагали, что он будет, тогда вообще не используйте код обработки исключений; просто проверьте, что он существует, прежде чем читать его.

2 голосов
/ 14 апреля 2010
try
{
 yourXmlDocument.LoadXML("xml is here");
}catch{
 //It has failed.
}

Вы можете быть еще более конкретным и отлавливать только ошибки из LoadXML

try
{
    yourXmlDocument.LoadXML("xml is here");
}catch(System.Xml.XmlException e){
    //It has failed.
}
1 голос
/ 14 апреля 2010

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

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

1 голос
/ 14 апреля 2010

Никогда не игнорируйте исключения. Эти слова "Я уверен, что могу смело игнорировать это" иногда приводят к худшим и трудным поискам ошибок.

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

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

Поскольку вы, возможно, спрашиваете об общем случае, именно так вы поступаете с исключениями, если хотите «игнорировать» их (если вы не хотите отображать их пользователю):

try
{
  //do something that throws an exception
}
catch(Exception ex) //or even better: catch a specific exception type
{
  //do not ignore the exception, at least log it
  System.Diagnostics.Debug.Fail(ex.Message, ex.ToString());
  log.Debug("Probably expected error happened: " + ex.ToString());
}
0 голосов
/ 14 апреля 2010

Используйте блок try-catch. http://msdn.microsoft.com/en-us/library/0yd65esw%28VS.80%29.aspx

0 голосов
/ 14 апреля 2010

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

Если вы получите объект Exception, тогда вы можете вытащить на него старый добрый try / catch stuff .

0 голосов
/ 14 апреля 2010

Вы можете просто поставить try / catch вокруг кода и ничего не делать с созданным исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...