Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Обработка ошибки при вызове метода / 5 сообщений из 5, страница 1 из 1
04.11.2014, 19:15
    #38795506
stavelot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Обработка ошибки при вызове метода
Паршу XML c помощью XML::DOM

Вызываю метод для получения дочернего значения:

Код: php
1.
2.
my @title = $speciesg->getElementsByTagName('title')->item(0)
            ->getFirstChild->getNodeValue;



Но проблема в том, в дереве XML не всегда присутствует нода 'title' и когда ее нету происходит ошибка : Can't call method "getFirstChild" on an undefined value

Мне нужно, что бы когда данной ноды нету, Perl скрипт продолжал работу.
...
Рейтинг: 0 / 0
05.11.2014, 05:07
    #38795716
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Обработка ошибки при вызове метода
оберни стрёмный код в блок eval ( точка с запятой после закр. фиг. скобки eval обязательна )

Код: perl
1.
2.
3.
4.
5.
6.
eval {
         my @title = $speciesg->getElementsByTagName('title')->item(0)
                              ->getFirstChild->getNodeValue;
};

warn $@ if $@;
...
Рейтинг: 0 / 0
05.11.2014, 05:46
    #38795722
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Обработка ошибки при вызове метода
stavelot,

либо поставить модуль Try *
( в данном случае исключительно из эстетических соображений)

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
use Try::Tiny;
use XML::DOM;

try {
         my @title = $speciesg->getElementsByTagName('title')->item(0)
                              ->getFirstChild->getNodeValue;

} catch { warn "ошибка : $_" };
...
Рейтинг: 0 / 0
05.11.2014, 06:23
    #38795729
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Обработка ошибки при вызове метода
А можно и традиционно сделать:
Код: php
1.
2.
3.
4.
5.
6.
7.
my $element = $speciesg->getElementsByTagName('title')->item(0);
my @title;
if ( defined( $element ) ) {
   @title = $element->getFirstChild->getNodeValue;
} else {
   die "все пропало!";
}
...
Рейтинг: 0 / 0
05.11.2014, 14:39
    #38796357
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Обработка ошибки при вызове метода
White OwlА можно и традиционно сделать:
[/src]

можно, если у него один такой тэг.

a если их 20 и на разной глубине, то придется сильно править.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Обработка ошибки при вызове метода / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]