TRY

Instruction

Syntaxe

Exécute des instructions et intercepte l’erreur d’exécution qu’elles lèvent. CATCH traite l’erreur, FINALLY s’exécute toujours à la fin.

TRY
  <statements>
[CATCH [<name>[$]]
  <statements>]
[FINALLY
  <statements>]
ENDTRY
END TRY

S’écrit aussi : CATCH, FINALLY, ENDTRY, END TRY

Les éléments

<statements>N’importe quelles instructions, y compris d’autres blocs TRY.
<name>Variable de capture, facultative. Avec $, elle reçoit le message sous forme de texte. Sans $, elle reçoit un enregistrement en lecture seule avec les champs name, message, code et command. Sans nom, l’erreur est ignorée.

À savoir

  • Un TRY demande un CATCH, un FINALLY ou les deux : "TRY requires CATCH or FINALLY". L’ordre est imposé : CATCH, puis FINALLY. Un seul CATCH au plus.
  • ENDTRY et END TRY sont équivalents. Chaque mot-clé tient sur sa propre ligne : TRY: THROW "x" est refusé.
  • FINALLY s’exécute après une fin normale, après une erreur, après EXITFUNCTION, RETURN, END et un GOTO qui sort du bloc. END et GOTO ne sont pas des erreurs : CATCH ne les voit jamais.
  • Donnez à la variable de capture un nom à elle. Si le même nom est déclaré ou affecté ailleurs dans la même portée, le programme compile mais ne peut pas démarrer ("Identifier … has already been declared").
  • La variable de capture reste lisible après ENDTRY. Dans une FUNCTION, elle appartient à la fonction.
  • Les erreurs de compilation ne sont pas interceptées : elles arrêtent le programme avant son lancement. Pour les commandes du catalogue, ErrorMode() décide si un échec lève une erreur.
  • Dans une tâche, un TRY autour d’un Wait(), d’un Sync() ou d’un YieldTask() intercepte aussi l’annulation de CANCELTASK, avec le message BASIC task cancelled. La tâche continue alors jusqu’à sa prochaine cession. Placez un RETHROW dans le CATCH quand le message vaut BASIC task cancelled.

Exemple

TRY  THROW "out of ammo"CATCH problem$  Console("caught: " + problem$)   ' caught: out of ammoFINALLY  Console("cleanup")               ' cleanupENDTRYConsole("after: " + problem$)      ' after: out of ammo
Dans le manuel : Erreurs