[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