Exceptions/Catch an exception thrown in a nested call: Difference between revisions

Content added Content deleted
(Added Io entry)
(Added FreeBASIC)
Line 1,035:
The second exception is not handled, and results in the program finishing
and printing a stack trace.
 
=={{header|FreeBASIC}}==
FreeBASIC does not support exceptions or the Try/Catch/Finally statement, as such. However, you can use the Err() function, together with an If (or Switch) statement, to provide somewhat similar functionality:
<lang freebasic>' FB 1.05.0 Win64
 
Enum ErrorTypes
U0 = 1000
U1
End Enum
 
Function errorName(ex As ErrorTypes) As String
Select Case As Const ex
Case U0
Return "U0"
Case U1
Return "U1"
End Select
End Function
Sub catchError(ex As ErrorTypes)
Dim e As Integer = Err '' cache the error number
If e = ex Then
Print "Error "; errorName(ex); ", number"; ex; " caught"
End If
End Sub
 
Sub baz()
Static As Integer timesCalled = 0 '' persisted between procedure calls
timesCalled += 1
If timesCalled = 1 Then
err = U0
Else
err = U1
End if
End Sub
Sub bar()
baz
End Sub
 
Sub foo()
bar
catchError(U0) '' not interested in U1, assumed non-fatal
bar
catchError(U0)
End Sub
 
Foo
Print
Print "Press any key to quit"
Sleep</lang>
 
{{out}}
<pre>
Error U0, number 1000 caught
</pre>
 
=={{header|Go}}==