Jump to content

[Resolvido] Try catch


Recommended Posts

Posted

Estou a usar o try - catch para obter os dados de um serviço externo, a questão é que por vezes ocorre connection timeout, e queria arranjar forma de repetir a obtenção de dados até que a excepção deixe de existir.

Tinha pensado algo do estilo:

try {

obter dados do exterior;

} catch (exception) {

repetir até não existir exceção

}

O problema é que não sei como fazer isto do ponto de vista semântico. O que me ocorre seria por um try..catch dentro do catch, mas isto apenas iria resolver um nível de exceção e se ocorresse duas vezes seguida a informação seria suprimida. Talvez usando um while? a minha dúvida agora seria como usar um while try ctach ou algo do género, isto partindo do principio que é possível.

Alguém tem sugestões?

Posted (edited)

e queria arranjar forma de repetir a obtenção de dados até que a excepção deixe de existir.

isso é uma muito má opção ... o que deverias ter seria um contador que iria efectuar a operação N vezes deixando falahar ao fim dessas N vezes, caso contrário, poderás ter um ciclo infinito ...

$ntries = 3;
$try = 0;
$ok = false;
do {
 $try++;
 try {
   // do stuff ...

   $ok = true;
 } catch(Exception $ex) {
 }
} while (!$ok && $try <= $ntries);
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

Isto vai dar uma grande salganhada.. mas desde que funcione, serve. É que já tenho um ciclo fora, e então iria ficar algo deste género.

while ("iterar sobre um ano semana a semana") {

$terminou=false;
while(!$terminou)
{
	try
	{
			// obter dados do exterior;

			$terminou=true;
	}
	catch(Exception $ex)  
	{
			//repetir até não existir exceção
	}
}

}

Mas não cometeste aí um erro qualquer? A inicialização não tem que ser a true, e meter a variável $terminou a false dentro do catch?

isso é uma muito má opção ... o que deverias ter seria um contador que iria efectuar a operação N vezes deixando falahar ao fim dessas N vezes, caso contrário, poderás ter um ciclo infinito ...

$ntries = 3;
$try = 0;
$ok = false;
do {
 $try++;
 try {
// do stuff ...

$ok = true;
 } catch(Exception $ex) {
 }
} while (!$ok && $try <= $ntries);

Sinceramente também tens razão, a questão de provocar um ciclo infinito pode ser igualmente má. Vou ter que refletir melhor sobre este assunto e forma correta de tratar a falha, provavelmente será com um número de tentativas máximo e um ficheiro de log para registar as falhas..

Obrigado pela pronta ajuda.

Posted

Não me parece. Se iniciasse a true, nem entrava no while.

Já reparei que me esqueci de dizer que dentro do while não poderia ser negado. E ia dar ao mesmo, só que em vez de estar true dentro do try, estaria o false dentro do catch..

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.