[Cascavel-pm] Tratamento de erro
Luiz Gonzaga
lgonzaga em lncc.br
Quarta Junho 2 11:40:26 CDT 2004
Oi Luis,
Foi de grande valor a sua resposta. Testei ambas as solucoes e a que utiliza o "eval" funcionou.
Duas pequenas correcoes: Com certeza o $ca tem valor definido. Eu jah havia testado antes e nao me ocorreu de informar no email. Por este motivo a solucao proposta com o UNIVERSAL::isa nao funcionou. E no restante do codigo eu utilizo outros metodos sobre este objeto sem problemas.
Com eval, ocorreu um erro de digitacao na linha: die "Erro: $!\n" if $@; o correto eh die "Erro $@\n" if $@;
Muito obrigado e abracos.
Luiz.
On Wed, 2 Jun 2004 12:34:57 -0300
"Luis Campos de Carvalho" <lechamps em terra.com.br> wrote:
> ----- Original Message -----
> From: "Luiz Gonzaga" <lgonzaga em lncc.br>
> To: <cascavel-pm em mail.pm.org>
> Sent: Wednesday, June 02, 2004 12:23 PM
> Subject: [Cascavel-pm] Tratamento de erro
>
>
> > Pessoal,
> >
> > Desculpem-me mandar uma duvida sem consultar antes a documentacao etc.
> > Mas estou com muita pressa, e preciso da ajuda de voces. Enquanto isto
> > consultarei o "man" e se encontrar a solucao aviso.
> >
> > A questao e a seguinte, faco uma chamada a um metodo do objeto "$ca" e
> > para uma determinado valor recebo uma mensagem de erro que nao posso
> > chamar o metodo para um valor indefinido. Acho que o problema esta no
> > modulo que estou usando (Bio::Assembly::ContigAnalysis). O que eu preciso
> > eh saber como tratar este erro sem que o meu script
> > (LoadProblemsFinish.pl) seja interrompido.
> >
> > O codigo "enxugado" eh este:
> > foreach $contig ($assembly->all_contigs)
> > {
> > $ca = Bio::Assembly::ContigAnalysis->new(-contig=>$contig);
> > @ncbs = $ca->not_confirmed_on_both_strands;
> > #executo outros comandos a partir do conteudo de @ncbs
> > }
> >
>
> Prezado Luiz
>
> Seu problema é que a variável $ca não tem valor definido ( quer dizer que
> "defined $ca" retorna falso).
>
> Para resolver este problema, você pode fazer assim:
>
> foreach $contig ($assembly->all_contigs)
> {
> $ca = Bio::Assembly::ContigAnalysis->new(-contig=>$contig);
> if( UNIVERSAL::isa( $ca, 'Bio::Assembly::ContigAnalysis' ){
> @ncbs = $ca->not_confirmed_on_both_strands;
> #executo outros comandos a partir do conteudo de @ncbs
> }else{
> # Erro!!
> }
> }
>
> Ou assim:
> foreach $contig ($assembly->all_contigs)
> {
> $ca = Bio::Assembly::ContigAnalysis->new(-contig=>$contig);
> eval{ @ncbs = $ca->not_confirmed_on_both_strands; }
> die "Erro: $!\n" if $@; # Tratamento do erro capturado no "eval" acima
> #executo outros comandos a partir do conteudo de @ncbs
> }
>
> Se isso não resolver, por favor me informe, pela lista. Mais gente pode
> dar idéias melhores.
>
> Putamplexos!
> --
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> Luis Campos de Carvalho
> Computer Scientist
> OCP DBA Oracle & Senior Unix Sys Admin
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em mail.pm.org
> http://cascavel.pm.org/mailman/listinfo/cascavel-pm
>
Mais detalhes sobre a lista de discussão Cascavel-pm