首页 > 解决方案 > 在 try/catch 块中捕获异常后继续执行循环

问题描述

如果while (iterator.hasNext())发生异常,如何继续迭代循环?

所以我想做下面的事情。

            try {
                loop: while (iterator.hasNext())  // as excetion is on this line excetion will be catch by catch_2
                {
                    try {
                        Result res = (Result) iterator.next();
                        list.add(res);
                    } catch (Exception e) {                    // catch_1
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {                            // catch_2
                // goto start of the loop
                continue loop;
            }

Iterator<UserProvisioning> iterator = beans.iterator();
            while (iterator.hasNext()) {
                try {
                    UserProvisioning userProvisioning = (UserProvisioning) iterator.next();
                    System.out.println(userProvisioning.getFIRST_NAME());
                    list.add(userProvisioning);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    logger.error("Error occured...)
                }
            }

根据我的理解,iterator.hasNext() 尝试通过将 csv 记录列映射到 POJO 字段来检查下一个元素是否存在,并且由于 csv 记录标题计数中存在无效数据,因此与记录文件不匹配因此错误

java.lang.RuntimeException: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.

所以我试图记录错误并继续迭代下一条记录。

EDIT iterator.hasNext()应该返回 true 或 false 但它的抛出错误

标签: javaloopsexceptiontry-catch

解决方案


如果你在循环中放置一个 try-catch 块,它将继续循环到最后,除非你打破它

for(Iterator<UserProvisioning> iter = beans.iterator(); iter.hasNext();) {
  try{
    UserProvisioning userProvisioning = iter.next();
    System.out.println(userProvisioning.getFIRST_NAME());
    list.add(userProvisioning);
  } catch(Exception ex) {
    logger.warn("An issue occurred when looping through user provisionings: " + ex.getMessage());

  }
}

上面的代码将设置一个迭代器并循环遍历它。如果发生异常,它将记录并继续循环,因为没有break调用。

也因为你告诉迭代器是什么类型,当你调用时不需要转换它iter.next()


推荐阅读