Существуют, конечно, обстоятельства, где нормально ловить определенное исключение и ничего не делать. Вот тривиальный пример:
public FileStream OpenFile(string path)
{
FileStream f = null;
try
{
f = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
}
catch (FileNotFoundException)
{
}
return f;
}
Вы могли также записать методу этот путь:
public FileStream OpenFile(string path)
{
FileStream f = null;
FileInfo fi = new FileInfo(path);
if (fi.Exists)
{
f = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
}
return f;
}
В этом случае, ловя исключение (очень) незначительно более безопасно, поскольку файл мог быть удален между временем, Вы проверяете на его существование и время, Вы открываете его.
существуют причины не , чтобы сделать это, уверенное. В.NET исключения являются в вычислительном отношении дорогими, таким образом, Вы хотите избежать чего-либо, что бросает многие из них. (В Python, где исключения являются дешевыми, это - общая идиома для использования исключений, чтобы сделать, вещам нравится, убегают из циклов.)
, Но это игнорирует конкретный исключение. Этот код:
catch
{
}
непростительно.
нет никакого серьезного основания не поймать определенное введенное исключение, которое код в try
блок собирается выдать. Первой причиной, что наивный разработчик дает для ловли исключений независимо от типа, "Но я не знаю, какое исключение могло бы быть выдано", является вид ответа на вопрос.
, Если Вы не знаете, какое исключение могло бы быть выдано, Вы не знаете, как Ваш код может перестать работать. Если Вы не знаете, как Ваш код может перестать работать, у Вас нет основания для предположения, что нормально только продолжать обрабатывать, если это делает.
Ознакомьтесь с документацией XML :: Twig
для start_tag_handlers
:
Обработчики вызываются с двумя параметрами: веточкой и элементом. В этот момент элемент пуст, но его атрибуты создаются.
Во время вызова start_tag_handlers
текстовое содержимое еще даже не отображается, поскольку анализируется начальный тег (например,
, а не конечный тег
) только что завершился.
Причина, по которой end_tag_handlers
не работают текст элемента снабжения, вероятно, предназначен для симметрии :-).
Вы, вероятно, захотите использовать вместо этого twig_handlers
:
my $twig = XML::Twig->new(
twig_handlers => {
'apps/title' => \&kicks,
'apps/logs' => \&bye
},
twig_roots => {
'apps' => \&app
},
);
Результат:
---kicks---
watch
bye
csv
---app---
watchset,start,00:00,alart,endcsv
---kicks---
machine
bye
dump
---app---
machinedown,select,vol_100,check,line,enddump