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 TRYS’é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.
ENDTRYetEND TRYsont é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,ENDet unGOTOqui sort du bloc.ENDetGOTOne 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 uneFUNCTION, 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 deCANCELTASK, avec le messageBASIC task cancelled. La tâche continue alors jusqu’à sa prochaine cession. Placez unRETHROWdans le CATCH quand le message vautBASIC 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 ammoDans le manuel : Erreurs