You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中Err.Raise抛错后Err.Description显示为空的问题

解决VB.NET中Err.Raise后Err.Description为空的问题

我碰到过不少类似的情况,明明按语法抛出了错误,却拿不到描述信息。结合你的代码和VB.NET的错误处理机制,给你梳理几个可能的原因和解决办法:

1. 自定义错误号必须使用正确范围

VB.NET里系统错误号的范围是0到65535,如果你用的FNReleaseError.ErrFNPropValueNotValid是自定义错误码,必须加上vbObjectError(值为-2147221504)来标记这是自定义错误。直接用小于vbObjectError的编号,系统可能不会正确保留你传入的描述内容。

修改你的Err.Raise调用:

Err.Raise(vbObjectError + FNReleaseError.ErrFNPropValueNotValid, , FNPropValueNotValid & "Property Name = " & _
    l_strIndexName & " Property Value = " & l_objIndexValue.Value)

2. 先确认错误描述字符串本身有效

虽然你说所有变量都已正确赋值,但还是建议先单独拼接并输出描述内容,排除字符串本身为空的可能。可以在Err.Raise前加一行调试代码:

Dim errorDesc As String = FNPropValueNotValid & "Property Name = " & l_strIndexName & " Property Value = " & l_objIndexValue.Value
' 输出到调试窗口看内容
System.Diagnostics.Debug.WriteLine("待抛出的错误描述:" & errorDesc)
Err.Raise(...) ' 原调用语句

如果调试窗口里这个字符串是空的,那问题就出在拼接的变量上,得重新检查FNPropValueNotValid、l_strIndexName或l_objIndexValue.Value的赋值逻辑。

3. 在错误处理块中先判断是否真的触发了错误

有时候如果代码没走到Err.Raise(比如测试时的分支问题),Err.Description自然是空的。可以在处理块里先做个判断:

CreateSyncDocumentErr:
    If Err.Number <> 0 Then
        WriteTraceEntry(Err.Description, False)
        ' 处理完记得清除Err对象,避免影响后续代码
        Err.Clear()
    End If

4. 建议迁移到Try-Catch(更可靠的现代写法)

On Error GoTo是VB6遗留的错误处理方式,VB.NET推荐用Try-Catch结构,错误信息更稳定,调试也更方便:

Public Function CreateSyncDocument()
    Try
        Throw New Exception(FNPropValueNotValid & "Property Name = " & l_strIndexName & " Property Value = " & l_objIndexValue.Value)
    Catch ex As Exception
        WriteTraceEntry(ex.Message, False)
    End Try
End Function

如果需要更复杂的错误信息,还可以自定义继承自Exception的异常类,携带更多业务相关的错误属性。


内容的提问来源于stack exchange,提问作者Anurag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:03:28