FreeBasic Error
关键字
最后修改日期:2025 年 6 月 16 日
FreeBasic 中的 Error
关键字用于错误处理和异常管理。它允许程序优雅地处理运行时错误和意外情况。
基本定义
在 FreeBasic 中,Error
用于引发自定义错误或处理运行时异常。它与 On Error
语句一起使用,以创建健壮的错误处理例程。
错误处理机制有助于防止程序崩溃,并允许从异常情况中进行受控恢复。FreeBasic 提供内置和用户定义的错误代码。
简单的错误处理
此示例演示了使用 On Error
的基本错误处理。
On Error Goto ErrorHandler Dim x As Integer = 10 Dim y As Integer = 0 Print "Result: "; x / y ' This will cause division by zero error Exit Sub ErrorHandler: Print "Error occurred: "; Err Print "Error description: "; Error$(Err) Resume Next
在这里,我们设置了一个错误处理程序,在发生错误时跳转到 ErrorHandler
标签。除以零会触发该处理程序,该处理程序在继续之前会打印错误代码和描述。
引发自定义错误
您可以使用 Error
关键字引发自定义错误。
Sub ProcessValue(n As Integer) If n < 0 Then Error 1000 ' Raise custom error End If Print "Processing value: "; n End Sub On Error Goto Handler ProcessValue(10) ProcessValue(-5) ' This will trigger our custom error Exit Sub Handler: Print "Custom error caught: "; Err If Err = 1000 Then Print "Negative values not allowed" End If Resume Next
此代码为负输入值定义了一个自定义错误 (1000)。当发生错误时,控制权会转移到处理程序,该处理程序为我们的自定义错误代码提供了特定的消息。
Error Resume Next
Resume Next
语句会在错误后继续执行。
On Error Resume Next Dim a(5) As Integer a(10) = 42 ' This would normally cause an out-of-bounds error If Err Then Print "Array access error occurred" Err = 0 ' Clear the error End If Print "Program continues normally"
On Error Resume Next
会抑制正常错误处理并继续执行。我们手动检查 Err
来检测是否发生了错误。此方法对于非关键操作很有用。
嵌套错误处理程序
FreeBasic 允许嵌套错误处理程序以处理更复杂的场景。
Sub InnerSub() On Error Goto InnerHandler Error 200 ' Simulate an error Exit Sub InnerHandler: Print "Inner handler caught error: "; Err Resume Next End Sub On Error Goto OuterHandler Print "Calling InnerSub" InnerSub() Print "Back from InnerSub" Exit Sub OuterHandler: Print "Outer handler caught error: "; Err Resume Next
此示例显示了嵌套错误处理。内部处理程序会捕获并处理其错误,因此外部处理程序永远不会看到它。每个子程序都可以有自己的错误处理逻辑。
Error 对象
FreeBasic 提供 Err
对象来获取错误信息。
On Error Goto Handler Open "nonexistent.txt" For Input As #1 ' This will fail Exit Sub Handler: Print "Error number: "; Err Print "Error description: "; Error$(Err) Print "Error line: "; Erl Resume Next
Err
对象包含错误编号,而 Error$
提供描述。Erl
提供发生错误的行号,有助于调试。
函数中的错误处理
函数可以使用错误处理来验证参数或操作。
Function SafeDivide(a As Integer, b As Integer) As Double On Error Goto DivError Return a / b Exit Function DivError: Print "Division error in SafeDivide" Return 0 End Function Print "10 / 2 = "; SafeDivide(10, 2) Print "10 / 0 = "; SafeDivide(10, 0)
此函数实现了自己的除法运算错误处理。当发生除以零时,它会捕获错误并返回 0 而不是崩溃。调用代码保持简洁明了。
禁用错误处理
您可以使用 On Error Goto 0
禁用错误处理。
On Error Goto Handler Print "Before critical section" On Error Goto 0 ' Disable error handling ' Critical section where we want immediate failure on errors Dim p As Integer Ptr = 0 *p = 42 ' This will crash immediately Print "This won't be printed" Exit Sub Handler: Print "This handler won't be reached for the critical error" Resume Next
此代码显示了如何临时禁用错误处理。在关键部分,立即失败可能比错误恢复更可取。空指针赋值按预期使程序崩溃。
最佳实践
- 特定处理程序: 为不同类型的错误创建单独的处理程序。
- 错误代码: 使用有意义的自定义错误代码(1000 以上)。
- 清理: 在错误处理程序中始终包含清理代码。
- 文档: 记录所有自定义错误代码及其含义。
- 测试: 彻底测试错误路径,就像测试正常执行路径一样。
本教程通过实际示例介绍了 FreeBasic 的 Error
关键字,展示了其在不同场景下的用法。