Gambas France BETA


Pas de compte ? Incription

Comment passer outre une erreur

Ce sujet est résolu.

1
AuteurMessages
décapode#1 Posté le 29/11/2013 à 18:51:43
Re HI!
POur faire simple comment faire un : On Error Resume Next comme en vb6
Exemple :

If truc = machin then
bla bla
Pas de pot 'machin' est NULL, mais je veut continuer quand même,

J'essaie les try, catch dans tous les sens, mais non.
1
2
3
4
5
6
7
8
9
TRY IF truc = machin THEN

bloc d'instruction que tu veux

CATCH

bloc d'instruction si erreur

END TRY


ou :

1
2
3
4
5
6
7
8
9
10
TRY
IF truc = machin THEN

bloc d'instruction que tu veux

CATCH

bloc d'instruction si erreur

END TRY


Un peu comme en vbnet

Mais là non plus
gambix#2 Posté le 29/11/2013 à 22:37:59
Faire simple !
en vb :

Public Sub OnErrorDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
On Error GoTo 0 ' Turn off error trapping.
On Error Resume Next ' Defer error trapping.
z = x / y ' Creates a divide by zero error again
If Err.Number = 6 Then
' Tell user what happened. Then clear the Err object.
Dim Msg As String
Msg = "There was an error attempting to divide by zero!"
MsgBox(Msg, , "Divide by zero error")
Err.Clear() ' Clear Err object fields.
End If
Exit Sub ' Exit to avoid handler.
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 6 ' Divide by zero error
MsgBox("You attempted to divide by zero!")
' Insert code to handle this error
Case Else
' Insert code to handle other situations here...
End Select
Resume Next ' Resume execution at same line
' that caused the error.
End Sub




En Gambas :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PUBLIC SUB gbErrorDemo()

DIM x AS INTEGER = 32
DIM y AS INTEGER = 0
DIM z AS INTEGER
DIM Msg AS STRING
'équivalent de on Error resume next
TRY z = x / y
'Print Error.Code
IF ERROR AND IF Error.Code = 26 THEN
Msg = "There was an error attempting to divide by zero!"
Message.Error(Msg)
Error.Clear() ' Clear Err object fields.... bon pas très important en gb
ENDIF
z = x / y

CATCH
'code éxécuté en cas d'erreur
' ErrorHandler: ' Error-handling routine.
SELECT CASE Error.code ' Evaluate error number.
CASE 26 ' Divide by zero error
Message.error("You attempted to divide by zero!")
' Insert code to handle this error
CASE ELSE
' Insert code to handle other situations here...
END SELECT

END



Moins de texte dans une signature c'est agrandir son espace.
décapode#3 Posté le 30/11/2013 à 05:56:40
Salut
Ce que je n'ai vu dit nulle part c'est que le catch supprime les erreurs externes à sa procédure,
mais pas celles qui lui sont propres, d'où mon erreur... :lol: ...enfin en partie


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PUBLIC SUB Form_Open()
DIM a AS INTEGER
DIM b AS INTEGER
a = 2
b = 0
PRINT a / b 'va génerer un erreur division par zéro
'Finally
'Try
TextLabel1.Text = "CLASS: " & Str(Error.class) & ", CODE: " & error.code & ", = " & error.text & " AT: " & error.where
TextLabel1.Refresh
CATCH
IF ERROR THEN
Message.Error("CLASS: " & Str(Error.class) & ", CODE: " & error.code & ", = " & error.text & " AT: " & error.where,
"OK")
ENDIF

END


... et je ne sais toujours pas traiter une erreur sur un IF
Jack#4 Posté le 30/11/2013 à 08:40:09
Catch intercepte ton programme en cas d'erreur donc tu ne dois pas mettre if error puisque implicitement il y en a une, mais tout simplement

Catch
message.Error(Error.Text & " " & Error.where)

Si tu veux traiter une erreur par un if il faut utiliser Try
par exemple :

try x = b
if error then x = 1

Si tu fait:
try x = b

catch
x = 1

Tu n'iras jamais sur le catch
Pour un code démocratique nationalisons Gambas.
décapode#5 Posté le 30/11/2013 à 08:52:22
Salut
Compris
Merci
:lol:
gambix#6 Posté le 30/11/2013 à 14:52:23
Faire simple !catch et try font le même travail... absorber l'erreur... si try est passé par la ... catch n'est pas déclenché.

c'est ce que j'ai voulus te montrer aussi avec mon exemple.
Moins de texte dans une signature c'est agrandir son espace.
1