【问题标题】:How to handle errors inside Catch block如何处理 Catch 块中的错误
【发布时间】:2019-11-12 13:03:50
【问题描述】:

在我的应用程序中,我的 REST 调用得到了 System.NullReferenceException。 此错误是由 Catch 块中的代码引起的。 在 Catch 块中放置另一个 try catch 块是个好主意吗? 在下面的代码中,Catch 块中的以下代码行抛出错误。

resultObject.ErrorResponse = _client.GetErrorResponse(Of List(Of ErrorResponseObject))(ex, "{""errors"":")

如何解决此问题,以便用户看不到任何错误。 这是我的代码。

    Public Shared Function POSTCall()
_client = New BaseClient()
    Try

        strJsonResponse = _client.ExecuteURI(serviceUrl, requestHeader, "POST", resultObject, False, False)

    Catch ex As WebException            
        resultObject.ErrorResponse = _client.GetErrorResponse(Of List(Of ErrorResponseObject))(ex, "{""errors"":")      'This line causing error

        If Not IsNothing(resultObject.ErrorResponse) Then
            ' do some work
        End If

    Catch Exp As Exception
        'Supress the error. Let user goto next step.
    Finally
        _client = Nothing
    End Try

    Return resultObject
End Function

【问题讨论】:

  • 很少会抛出NullReferenceException,因为您通常应该首先通过空传播或If 运算符显式检查引用是否为空。你显然已经知道如何做到这一点,因为你正在下一行做,即使这不是最好的方法。可能在某些情况下它是有意义的,如果这是其中之一,Catch 块内的异常处理程序是可以的。
  • _client为null的问题,还是GetErrorResponse抛出NullRefException的问题?如果是后者,鉴于此处的用法并假设您控制该函数,它似乎是该函数中可能抛出的错误。如果是前者,请在尝试使用该对象时对其进行测试,而不是让它绊倒。
  • 顺便说一句,没有充分的理由使用IsNothing 函数,而您可以只使用运算符形式Is Nothing。另外,现在有一个IsNot 运算符,所以你可以直接说If resultObject.ErrorResponse IsNot Nothing,这样更容易阅读。
  • _client 不为空。超时时会发生此问题。您认为添加第三个 Catch 块(如“Catch nullRefEx As NullReferenceException”)会解决问题吗?
  • 我想它会解决这个问题,但如果你能做到这一点会更好,这样根本就没有 NullRefException。问题必须在GetErrorResponse 内——在这种情况下,我建议修复GetErrorResponse 以便它返回有用的东西而不是抛出——或者resultObject 为空——在这种情况下,您会遇到 Eric Lippert 所说的愚蠢异常,无需昂贵的 try-catch 即可轻松解决。

标签: asp.net vb.net exception


【解决方案1】:

您必须在 catch 块中捕获错误。这是特别合适的,因为代码试图做的是获取有关已经发生的错误的更多信息。当然,记录任何发生的错误可能是个好主意,即使应用程序可以继续运行。

【讨论】:

  • 您是否建议在 Catch 块内添加另一个 try catch 块?请指教
  • 是的,因为您正在尝试检索有关错误的其他信息。如果失败了,你想忽略它。
  • 如上所述,您应该尝试做的第一件事是消除异常。只有在不可能的情况下,您才应该在 catch 中添加额外的 try-catch。
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多