当前位置: 首页 > 知识库问答 >
问题:

即使使用try{}catch{},仍然获得NullReferenceException

宋嘉懿
2023-03-14

我有下面的代码:

foreach (var taskId in taskIdList)
{
    document = web.Load(path);
    try
    {
        nodes = document.DocumentNode.SelectNodes("//td")
            .Where(x => x.Attributes["title"].Value.Contains("Log.html")).ToArray();
    }
    catch (ArgumentNullException)
    {
        Console.WriteLine("ArgumentNullException in TaskId: " + taskId);
    }
    
    foreach (HtmlNode item in nodes)
    {
        try
        {
            downloadLinkList.Add(item.SelectSingleNode(".//a").Attributes["href"].Value);
        }
        catch(NullReferenceException)
        {
            Console.WriteLine("NullReferenceException in TaskId: " + taskId);
        }
    }
}

联机System.NullReferenceException:DownloadLinkList.Add(Item.SelectSingleNode(“.//a”).Attributes[“href”].Value);

怎样才能妥善处理,让它不再崩溃?我的印象是,它应该只是跳过前面。

使用break也不是一个选项,因为我仍然需要没有所需的href的某个页面的信息。

共有1个答案

陆高峰
2023-03-14

try/catch机制不会阻止异常发生。它将防止它传播/膨胀。

 try
 {
    downloadLinkList.Add(item.SelectSingleNode(".//a").Attributes["href"].Value);
 }
 catch(NullReferenceException)
 {
    Console.WriteLine("NullReferenceException in TaskId: " + taskId);
 }
 Console.WriteLine("Hello");

如果没有try/catch机制,将永远不会打印“hello”,因为异常中断了正常的代码流。通过捕获异常,您可以对异常执行某些操作,其余的代码可以继续。

但IDE有可能中断执行以显示异常(取决于您的设置),但您只需单击“continue”(F5),它将继续运行到控制台。WriteLine

 类似资料:
  • 我正尝试在出现连接错误时添加一个控件。我的目的是通过捕捉异常来阻止程序抛出异常。 但它会在控制台中打印: 抱歉,如果我打印了太多的StackTrace... 我想知道,如果我不打印出stacktrace,我如何使异常消失?谢谢:)

  • 当我在node中创建一个异步函数并使用await时,我正在使执行等待一个承诺解析(可以是一个解析或一个拒绝),我所做的是在try/catch块中放入一个await承诺,并在承诺拒绝的情况下抛出一个错误。问题是,当我在try/catch块内调用这个异步函数来捕获错误时,我会得到一个UnhandledPromiserEjectionWarning。但是使用await的全部意义并不是等待承诺解决并返回它

  • 亲爱的Selenium Webdriver专家, 当从http://www.domain.com.au/property/for-sale/house/nsw/auburn/?adid=2010111460对“/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a”执行XPath查询时,我(在if语句上)遇到以下异常: 下面是发生此异常的代码段:

  • 我正在做一个编程项目,并不断得到如下所示的错误。 关联文本文件

  • 问题内容: 好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。 什么时候应该使用try-catch块来改进我的应用程序? 我读过有人说我们应该仅使用try- catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try- catch防止它们出现?我应该将所有应用程序代