Ну, это не об отображении stacktrace или тихо катастрофическом отказе. Это о способности передать ошибки между слоями.
проблема с контролируемыми исключительными ситуациями, они поощряют людей глотать важные детали (а именно, класс исключений). Если Вы принимаете решение не глотать ту деталь, то необходимо продолжать добавлять объявления вызовов через целое приложение. Это означает 1) это, новый тип исключительной ситуации будет влиять на большое количество функциональных подписей и 2) Вас, может пропустить определенный экземпляр исключения, которое Вы на самом деле - хотите поймать (скажите открытие вторичного файла для функции, которая пишет данные в файл. Вторичный файл является дополнительным, таким образом, можно проигнорировать его ошибки, но потому что подпись throws IOException
, легко пропустить это).
я на самом деле справляюсь с этой ситуацией теперь в приложении. Мы повторно упаковали почти исключения как AppSpecificException. Это заставило подписи действительно убрать, и мы не должны были волноваться о взрыве throws
в подписях.
, Конечно, теперь мы должны специализировать обработку ошибок в более высоких уровнях, реализовав логику повторной попытки и такой. Все - AppSpecificException, тем не менее, таким образом, мы не можем сказать, "Если IOException брошен, повторите" или, "Если ClassNotFound брошен, прервитесь полностью". У нас нет надежного способа стать к настоящими исключение, потому что вещи повторно упаковываются снова и снова, поскольку они передают между нашим кодом и сторонним кодом.
Поэтому я - большой поклонник обработки исключений в Python. Можно поймать только вещи, которые Вы хотите и/или можете обработать. Все остальное пузырится, как будто Вы повторно бросили его сами (который Вы сделали так или иначе).
я нашел, снова и снова, и в течение проекта я упомянул, та обработка исключений попадает в 3 категории:
Вот по крайней мере одно решение:
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild())
{
// Do this directly
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteElementString("foo", "bar");
writer.WriteEndElement();
writer.WriteEndDocument();
// or anything else you want to with writer, like calling functions etc.
}
Очевидно, XpathNavigator дает вам XmlWriter, когда вы вызываете AppendChild ()
Кредиты переходят к Мартину Хоннену в: http: // groups. google.com/group/microsoft.public.dotnet.xml/browse_thread/thread/24e4c8d249ad8299?pli=1[1259 visible
You could do the opposite : build the XmlDocument
first using DOM, then write it to a XmlWriter
:
XmlDocument xdoc = new XmlDocument();
... // build the document
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
xdoc.WriteTo(xw);
Идея XmlWriter состоит в том, чтобы дождаться завершения изменения данных перед началом записи.
XmlWriter не создавался с учетом вашей ситуации.
Либо
или
Существует базовый объект Stream, в который XmlWriter писал, если он был двунаправленным ( MemoryStream), вы можете просто переместить его обратно на -0-, а затем использовать объект Stream в XmlDocument.Load (потоке).
HTH,
Z