【问题标题】:how to identify caught errors?如何识别捕获的错误?
【发布时间】:2016-11-16 15:30:41
【问题描述】:

我抓住了Exception

如果这是一个特定的错误,我想做点什么。我可以很容易地用字符串识别它。

但是我想知道是否有更清洁的方法可以做到这一点。例如,当我为异常创建自己的包装器时,我会添加一个索引。

默认异常中有这样的东西吗?

我使用的引发错误的函数是RemoteWebDriver(硒对象)的实例化。但是,我不需要针对该课程的特定答案。

更准确地说,我发现了以下错误:OpenQA.Selenium.WebDriverException。 但是,如果在创建驱动程序时超时或关闭了 js 文件,则可能会抛出它。他们保存了HResult

所以我看不出除了检查字符串之外没有办法区分它们......

【问题讨论】:

  • 您想捕捉Exception 的特定子类吗?还是有特定信息的?
  • 嗯,很模糊。首先不要捕获异常,而是更喜欢派生类。其中一些具有数字错误代码以区分更具体的错误。基类也有 HResult 属性。没有更多上下文...
  • 你可以catch (SomeSubClassOfException),或者在C# 6中,你可以使用exception filters
  • 我想要一个带有特定信息的。关于我使用这个的子类,但是超过 1 条消息与同一个子类相关联......所以我仍然需要检查子字符串。 HResult 属性,我会调查的,谢谢
  • @CherrysaHerrim 通过消息过滤异常是您代码中的一个重大设计缺陷!

标签: c# exception


【解决方案1】:

您可以捕获特定的异常。比如……

try
{
    //Do things with your RemoteWebDriver...
}
catch (ImportantException e)
{
    //Do something important with this specific exception
}
catch (Exception e)
{
    throw;
}

当且仅当ImportantException 类型的异常被抛出时,此代码才会“执行”特定的操作,但在所有其他情况下,它会执行其他操作(在此示例中,它只是抛出异常)。

您还可以从 C#6 开始使用异常过滤器。见:https://stackoverflow.com/a/4268291/1672990

【讨论】:

  • 谢谢,但是我喜欢只过滤一个异常而不必过滤字符串,不知道该怎么做?
  • @CherrysaHerrim 我不确定你指的是什么“字符串”。
  • 我至少有 3 个相同类型的错误,但包含的消息不同。到目前为止,这是我发现区分它们的唯一方法。
  • @CherrysaHerrim - 您是否可以控制异常的创建,以便您可以编辑消息和它的其他属性?
  • @keyboardP 不幸的是我使用 dll(selenium web 驱动程序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2017-06-06
  • 2019-02-18
  • 2013-10-10
  • 2016-05-28
  • 1970-01-01
相关资源
最近更新 更多